Java多次继承后访问覆盖的父类同名属性
事情是这样的:Java类只能有一个直接父类,但可以有无限多个间接父类。(From 《疯狂Java讲义》)这样确实实现了多继承,如果想要访问同名的父类成员变量或方法,使用super
就可以,然后就有一个问题,多次继承之后,如何访问它的上上层或更高层的父类属性?
像下面代码的第6行这样:
public class SubSubClass extends SubClass {
int a = 30;
public void accessData() {
System.out.println(a); // "30"
System.out.println(super.a); // "20"
// System.out.println(super.super.a); // 这样不可以
}
public static void main(String[] args) {
new SubSubClass().accessData();
}
}
class SubClass extends BaseClass {
int a = 20;
}
class BaseClass {
int a = 10;
}
然后我查了一下,发现可以这样,把((BaseClass)this).a
替换掉super.super.a
,就可以输出BaseClass中的a了,是10。同理,使用父类中的同名方法也是这个道理。
2021-12-27 补充
使用父类函数
((BaseClass)this).originalMethod()
这种写法不再适用,因为多态的机制,调用的一直是子类重写的方法,不过,有另一种写法BaseClass.super.originalMethod()
。