意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

java语言基础(31)——面向对象(继承中的成员关系)

来源:恒创科技 编辑:恒创科技编辑部
2024-01-22 20:51:59


继承中成员变量之间的关系:就近原则



java语言基础(31)——面向对象(继承中的成员关系)

class Father
{
public int age = 30;
}
class Son extends Father
{
int age = 3;
public void showAge(){
int age = 2;
System.out.println(age); // 2 默认是局部变量
System.out.println(this.age); // 3 显式用this调用才会调用成员变量
System.out.println(super.age); // 30 若需要调用父类的同名变量需要用到super关键字
}
}

class ExtendsDemo
{
public static void main(String[] args){
Son s = new Son();
s.showAge();
}
}

通过以上测试代码,通过不同的注释测试结果,我们可以得到变量的调用优先顺序是 :

局部变量 本类成员变量 父类成员变量(就近原则)

当只有父类有变量age时System.out.println(age);会打印30,定义了Son类中的int age = 3 的时候,其输出为3,当进一步定义了局部变量int age=2时,其输出是2。而我们在有同名的局部变量和成员变量还有父类的成员变量时,我们可以用 this super 来调用本类的成员变量,和父类的成员变量。


成员方法之间的关系:同成员变量,就近原则,先看本类,再看父类。


构造方法之间的关系:子类所有的构造方法,都会访问父类的无参构造。

因为子类继承父类,所以要对父类的一些数据进行初始化,为其开辟空间,而开辟空间,就需要调用其构造方法。

注意:其实子类的每一个构造方法中默认的第一句代码都是 super(); 这里我们可以通过反编译java字节码文件得到论证。


class Father
{
public Father(){
System.out.println("Father无参构造");
}
public Father(String name){
System.out.println("Father带参构造");
}
}
class Son extends Father
{
public Son(){
System.out.println("Son无参构造");
}
public Son(String name){
System.out.println("Son带参构造");
}

}

class ExtendsDemo
{
public static void main(String[] args){
Son s = new Son();
System.out.println("----------");
Son s1 = new Son("小明");
/*
输出结果为
Father无参构造
Son无参构造
----------
Father无参构造
Son带参构造
*/
}
}


上一篇: java语言基础(38)——面向对象(抽象类的引入及存在的意义) 下一篇: 手机怎么远程登录云服务器?