【发布时间】:2018-06-28 08:51:11
【问题描述】:
请考虑以下课程:
public interface BaseInterface {
void method1();
void method2();
void method3();
}
public class BaseClass implements BaseInterface {
@Override
public void method1() {
System.out.println("BaseClass.method1 IN");
this.method3();
System.out.println("BaseClass.method1 OUT");
}
@Override
public void method2() {
System.out.println("BaseClass.method2 IN");
System.out.println("BaseClass.method2 OUT");
}
@Override
public void method3() {
System.out.println("BaseClass.method3 IN");
System.out.println("BaseClass.method3 OUT");
}
}
public class ChildClass extends BaseClass {
@Override
public void method1() {
System.out.println("ChildClass.method1 IN");
super.method1();
System.out.println("ChildClass.method1 OUT");
}
@Override
public void method2() {
System.out.println("ChildClass.method2 IN");
super.method2();
System.out.println("ChildClass.method2 OUT");
}
@Override
public void method3() {
System.out.println("ChildClass.method3 IN");
System.out.println("ChildClass.method3()");
System.out.println("ChildClass.method3 OUT");
}
}
在这种情况下,如果我创建ChildClass 的实例:
BaseInterface cc1 = new ChildClass();
然后运行这个类的method1
cc1.method1();
它将返回以下输出:
ChildClass.method1 IN
BaseClass.method1 IN
ChildClass.method3 IN
ChildClass.method3()
ChildClass.method3 OUT
BaseClass.method1 OUT
ChildClass.method1 OUT
因此,当我从超类 (BaseClass) 调用 this.method3()(或只是 method3())时,将执行 ChildClass 的 method3。我知道这是预期的行为,但我只是想知道如何在此设置中仍调用 BaseClass.method3?这可能吗?
请注意,这是一个纯粹的理论问题,我知道实际上我可能应该首先实例化一个 BaseClass 实例。这是解决这个问题的唯一方法吗?
【问题讨论】:
-
@BorisPavlović 谢谢,这是一个有趣的解决方案。
-
我认为评论晚了,但是当我运行上面的程序时,我的 o/p 与你的不同..
codeChildClass.method1 IN BaseClass.method1 IN BaseClass.method3 IN BaseClass.method3 OUT BaseClass .method1 OUT ChildClass.method1 OUT 。code
标签: java inheritance