这似乎是一个基本问题。但值得在采访前澄清。
我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用而不是重写方法。有没有办法做到这一点?
据我所知,没有办法调用原始方法?
public abstract class Testabstract {
public void t1() {
System.out.println("parent");
}
}
public class Testconcrete extends Testabstract {
public void t2() {
System.out.println("child11");
}
public void t1() {
System.out.println("childss");
}
}
public class Main {
public static void main(String[] args) {
Testconcrete a = new Testconcrete();
a.super.t1();// compile error
a.t2();
}
}
答案 0 :(得分:2)
不,你不能直接调用超类的重写方法。这是设计的;子类可能会添加某种正确性所需的行为(例如维护某种缓存或其他数据结构)或功能需求(例如日志记录)。绕过子类的功能会使模型的正确性处于危险之中并打破确保它的封装。
答案 1 :(得分:1)
super关键字只能在子类中使用。
前者可以尝试
public void t2() {
super.t1();
System.out.println("child11");
}
转换为Parent
也不起作用,您的基础元素仍为Child
。
因此,您无法以干净的方式从Child类外部访问。不知道他们是否有任何天真的方式来做到这一点。
答案 2 :(得分:0)
您的理解是正确的。在不更改类Testabstract
或Testconcrete
之一的情况下,无法在Testconcrete
的实例上调用原始方法。
我不认为用反射做到这一点。