方法调用总是根据对象的运行时类型确定,但是如何从继承实例调用基类的阴影方法?
class Base {
String str = "base";
String str() { return str; }
}
class Impl extends Base {
String str = "impl";
String str() { return str; }
}
class Test {
public static void main(String[] args) {
System.out.println(((Base) new Impl()).str); // print 'base'
System.out.println(((Base) new Impl()).str()); // print 'impl'
}
}
例如,如上所述,如何从str()
实例调用Base
类的Impl
方法,最好不使用反射?
答案 0 :(得分:2)
使用关键字超级
访问超类成员
如果您的方法覆盖了其超类的方法之一,则可以通过使用关键字super
来调用重写方法。您也可以使用super来引用隐藏字段(尽管不鼓励隐藏字段)。以下是一个例子。
public class Superclass {
public void printMethod() {
System.out.println("Printed in Superclass.");
}
}
从子类
开始调用printMethod这是一个名为Subclass的子类,它覆盖printMethod():
public class Subclass extends Superclass {
// overrides printMethod in Superclass
public void printMethod() {
super.printMethod();
System.out.println("Printed in Subclass");
}
public static void main(String[] args) {
Subclass s = new Subclass();
s.printMethod();
}
}
如果你想了解更多 https://docs.oracle.com/javase/tutorial/java/IandI/super.html