以下是我的代码。我有一个抽象类Myabatract
,它有方法myMethod
,我有一个子类MySubClass
,我在其中覆盖了myMethod
。在我的客户端类中
我有一个方法callMethod
,我希望直接调用myMethod
类的Myabatract
这可能吗?
abstract class Myabatract {
public void myMethod() {
System.out.println("This is from Myabatract");
}
}
class MySubClass extends Myabatract {
public void myMethod() {
System.out.println("This is from MySubClass");
super.myMethod();
}
}
class Client{
public void callMethod(){
}
}
答案 0 :(得分:2)
您可以创建abstract class
的匿名实现。鉴于它不使用任何abstract
方法,这一点特别容易。
class Client {
public void callMethod() {
Myabatract instance = new Myabatract() { /* nothing to implement*/ };
instance.myMethod();
}
}
作为MySubClass
类型的用户,您无法调用Myabatract
方法,因为它已被覆盖,除非MySubClass
要公开它。您唯一的办法是创建另一种方法,从super
(或其他子实现)中公开MySubClass
方法。
重要的是要注意,这将不工作:
class Client {
public void callMethod() {
MySubClass instance = new MySubClass() {
@Override
public void myMethod() {
super.myMethod();
}
};
instance.myMethod();
}
}
super
是非匿名类MySubClass
,这意味着什么都没有实际改变。有趣的是,这可以使用范围解析运算符(::
)在C ++中解决。
还值得指出的是,您在super.myMethod()
的实施中调用了MySubClass
,它会调用Myabatract
方法。