[英]Abstract class non abstract method invoke
这似乎是基本问题。 但在面试之前值得澄清。
我在抽象类中有一个非抽象方法。 它的具体类覆盖了该方法。 但是我想调用父类的原始方法来调用而不是重写方法。 有什么办法吗?
据我了解,没有办法调用原始方法吗?
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();
}
}
不,您不能直接调用超类的重写方法。 这是设计使然; 子类可能会添加某种正确性(例如维护某种缓存或其他数据结构)或功能要求(例如日志记录)所必需的行为。 绕过子类的功能将使模型的正确性受到威胁,并破坏了确保模型的封装。
super关键字只能在子类中使用。
对于前,你可以尝试做
public void t2() {
super.t1();
System.out.println("child11");
}
强制转换为Parent
仍然无法正常工作,您的基本元素是Child
。
因此,您不能以干净的方式从Child类的外部进行访问。 不完全知道它们是否是幼稚的方式。
您的理解是正确的。 如果不更改Testabstract
或Testconcrete
类之一,就无法在Testconcrete
实例上调用原始方法。
我认为反射是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.