Abstract class 非抽象方法调用
Abstract class non abstract method invoke
这似乎是个基本问题。但值得在采访前澄清。
我有一个抽象的非抽象方法class。它的具体 class 覆盖了那个方法。但是我想调用父class的原始方法来调用而不是重写方法。有什么办法吗?
据我所知,无法调用原始方法?
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 关键字只能在子项中使用 with class。
对于前任你可以试试
public void t2() {
super.t1();
System.out.println("child11");
}
投射到 Parent
也无法正常工作,您的基础元素仍然是 Child
。
因此您无法以干净的方式从 Child class 外部访问。不知道他们这样做是否有任何幼稚的方法。
不,您不能直接调用超类的重写方法。这是设计使然;子类可能会添加某些正确性所必需的行为(例如维护某种缓存或其他数据结构)或功能要求(例如日志记录)。绕过子类的功能会使模型的正确性面临风险并破坏确保它的封装。
您的理解是正确的。如果不更改 类 Testabstract
或 Testconcrete
之一,则无法在 Testconcrete
.
的实例上调用原始方法
我认为甚至不可能通过反射来做到这一点。
这似乎是个基本问题。但值得在采访前澄清。
我有一个抽象的非抽象方法class。它的具体 class 覆盖了那个方法。但是我想调用父class的原始方法来调用而不是重写方法。有什么办法吗?
据我所知,无法调用原始方法?
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 关键字只能在子项中使用 with class。
对于前任你可以试试
public void t2() {
super.t1();
System.out.println("child11");
}
投射到 Parent
也无法正常工作,您的基础元素仍然是 Child
。
因此您无法以干净的方式从 Child class 外部访问。不知道他们这样做是否有任何幼稚的方法。
不,您不能直接调用超类的重写方法。这是设计使然;子类可能会添加某些正确性所必需的行为(例如维护某种缓存或其他数据结构)或功能要求(例如日志记录)。绕过子类的功能会使模型的正确性面临风险并破坏确保它的封装。
您的理解是正确的。如果不更改 类 Testabstract
或 Testconcrete
之一,则无法在 Testconcrete
.
我认为甚至不可能通过反射来做到这一点。