成员变量继承规则
在父子类的继承关系中,如果成员变量重名,则创建子类对象时,有两种方式:
1.通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上找
2.间接通过成员方法访问成员变量,调用父类成员方法访问重名的父类成员变量
public class Fu {
public int id = 1;
int id_fu = 10;
public void methodFu(){
System.out.println(id);
}
}
public class Zi extends Fu{
int id = 2;
public void methodZi(){
int id = 3;
System.out.println(id);
System.out.println(this.id);
System.out.println(super.id);
}
}
public class testInheritance {
public static void main(String[] args) {
Zi zi = new Zi();
System.out.println(zi.id); //2 优先调用子类成员变量
System.out.println(zi.id_fu);//10 继承父类的成员变量
zi.methodFu(); //调用父类成员方法访问重名的父类成员变量
}
}
局部变量、子类成员变量、父类成员变量重名问题
利用关键字 this和super,以上述父子类为例子
public static void main(String[] args) {
Zi zi = new Zi();
zi.methodZi();
}
结果为:
成员方法继承规则
在父子类继承中,访问成员方法的规则:创建的对象是谁,就用谁,没有就向上找
public class Fu {
public void methodFu(){
System.out.println("这是父类");
}
public void method(){
System.out.println("这是重名父类!");
}
}
public class Zi extends Fu{
public void methodZi(){
System.out.println("这是子类");
}
public void method(){
System.out.println("这是重名子类!");
}
}
public class testInheritance {
public static void main(String[] args) {
Zi zi = new Zi();
zi.methodZi();
zi.methodFu();
zi.method();
}
}
结果
总结:
无论是成员变量还是成员方法,找不到都会向上找父类,不会向下找子类