如何在 Eclipse 中找出正确的重写方法
How to find out the proper overridden method in Eclipse
我有一个接口 I1
,它定义了一个方法 M1
。另外两个 classes C1
和 C2
正在实施 I1
并覆盖 M1
。
在另一个 class C3
中,我参考了 M1
。现在我如何理解 M1
是指 C1_M1
还是 C2_M1
?
P.S
调试代码的时候能查出来。但是我正在寻找一些捷径而不执行它。
它是运行时间多态性,所以你只能在运行时间理解它。
如果您知道程序的输入是什么,那么您就可以理解哪个 class 实例引用来了。
interface A{
}
class B implements A{
}
class C implements A{
}
class Main{
public static void main(String args[]){
// input
Object o = new B(); // just assume your logic give you object B.
if(o instanceof B){
B b = (B) o;
// invoke methods
}else if(o instanceof C){
C c = (C) o;
// invoke methods
}
}
}
在上面的代码中,您可以理解 class B
方法将被调用。
总而言之 - 您必须理解您的代码,识别输入,然后您才能理解将在 运行 时调用哪个 class。否则调试是最佳做法。
如果您以这种方式创建了对象
I1 i=new c1();
然后i.m1()
会调用class c1
的m1方法
如果
I1 i=new c2();
然后i.m1()
会调用class c2
的m1方法
如果您不知道该对象是如何创建的并且您只有引用那么很抱歉您只能在运行时找到它 Run time Polymorphism
我有一个接口 I1
,它定义了一个方法 M1
。另外两个 classes C1
和 C2
正在实施 I1
并覆盖 M1
。
在另一个 class C3
中,我参考了 M1
。现在我如何理解 M1
是指 C1_M1
还是 C2_M1
?
P.S
调试代码的时候能查出来。但是我正在寻找一些捷径而不执行它。
它是运行时间多态性,所以你只能在运行时间理解它。
如果您知道程序的输入是什么,那么您就可以理解哪个 class 实例引用来了。
interface A{
}
class B implements A{
}
class C implements A{
}
class Main{
public static void main(String args[]){
// input
Object o = new B(); // just assume your logic give you object B.
if(o instanceof B){
B b = (B) o;
// invoke methods
}else if(o instanceof C){
C c = (C) o;
// invoke methods
}
}
}
在上面的代码中,您可以理解 class B
方法将被调用。
总而言之 - 您必须理解您的代码,识别输入,然后您才能理解将在 运行 时调用哪个 class。否则调试是最佳做法。
如果您以这种方式创建了对象
I1 i=new c1();
然后i.m1()
会调用class c1
如果
I1 i=new c2();
然后i.m1()
会调用class c2
如果您不知道该对象是如何创建的并且您只有引用那么很抱歉您只能在运行时找到它 Run time Polymorphism