我用这个方法有两个java类:
class A {
void m1 () {
...
}
void m2 () {
...
m1();
...
}
}
class B extends A {
@Ovveride
void m1() {
...
}
void m3() {
m2();
}
}
我不确定在m1()
内调用的m2()
内部m3()
是否是在B内定义的新实现或A中的实现。
我希望使用B中定义的m2()
实现来调用A BUT中定义的m1()
方法。我的代码是正确的吗?
答案 0 :(得分:2)
这正是将要发生的事情。 B类覆盖方法m1并继承m2。在m2内部,当前对象上有一个m1 的调用。 (记住:“m1();”是“this.m1();”的简称。)由于在B的实例上重写了m1,因此将调用重写的方法。
但是不要相信我的话,亲自尝试吧!放入一两个简单的System.out.println
将证明这一点。
答案 1 :(得分:0)
您的代码是正确的,但请注意以下事项:
您需要实例化B才能使用它的覆盖方法:
obj = new B();
obj.m3();
现在你的obj m1方法实际上会链接到B.m1()
答案 2 :(得分:0)
A类:
public class A {
public void m1(){
System.out.println("Method1 from class A");
}
public void m2(){
System.out.println("Method2 from class A");
m1();
}
}
B组:
public class B extends A{
@Override
public void m1(){
System.out.println("Method1 from class B");
}
public void m3(){
m2();
}
}
主要:
public class TestAB {
public static void main(String[] args) {
A a=new A();
B b=new B();
a.m1();a.m2();
System.out.println();
b.m1();
b.m3();
}
}
结果:
A类的Method1 A类的方法2 A类的方法1
B类的Method1 A类的方法2 B类的方法1