Java—对特定继承场景感到困惑
假设我有一个名为a的类,在a中有一个名为Java—对特定继承场景感到困惑,java,inheritance,Java,Inheritance,假设我有一个名为a的类,在a中有一个名为myMethod()的方法。现在假设我创建了一个名为SubA的a的子类,在SubA中我重写了myMethod(),让它做我想做的事情。现在假设我在一个名为myOtherMethod()的函数中有另一个方法,它调用myMethod()(来自同一个类)。我不重写SubA中的myOtherMethod()。如果我现在从SubA内部调用myOtherMethod(),它显然会运行A的myOtherMethod()。但是,这现在是调用A中定义的myMethod(),
myMethod()
的方法。现在假设我创建了一个名为SubA的a的子类,在SubA中我重写了myMethod()
,让它做我想做的事情。现在假设我在一个名为myOtherMethod()
的函数中有另一个方法,它调用myMethod()
(来自同一个类)。我不重写SubA中的myOtherMethod()
。如果我现在从SubA内部调用myOtherMethod()
,它显然会运行A的myOtherMethod()
。但是,这现在是调用A中定义的myMethod()
,还是调用SubA中定义的(和重写的)方法
为了进一步混淆问题,是否
myMethod()
是类A实现的某个接口的接口方法有关系吗?如果您创建SubA
的实例,那么调用methodmyOtherMethod()
(在A
中)调用methodmyMethod()SubA
中定义的
,因为它覆盖了A
中定义的方法,所以很容易尝试-A是否实现了接口并不重要:
public class A {
public void myMethod() {
System.out.println("A.myMethod()");
}
public void myOtherMethod() {
System.out.println("A.myOtherMethod()");
myMethod();
}
public static class SubA extends A {
@Override
public void myMethod() {
System.out.println("SubA.myMethod()");
}
}
public static void main(String[] args) {
A a = new A();
SubA subA = new SubA();
a.myMethod(); //A.myMethod()
subA.myMethod(); //SubA.myMethod()
a.myOtherMethod(); //A.myOtherMethod() + A.myMethod()
subA.myOtherMethod(); //A.myOtherMethod() + SubA.myMethod()
}
}
这似乎很容易尝试,看看会发生什么…你为什么不自己试试呢?