我有一个接口I1
,它定义了一个方法M1
。其他两个类C1
和C2
正在实施I1
并覆盖M1
。
在另一个班级C3
中,我引用了M1
。现在,如果M1
指的是C1_M1
或C2_M1
,我将如何理解?
P.S
我可以在调试代码时找到它。但我正在寻找一些捷径而不执行它。
答案 0 :(得分:2)
它是运行时多态,因此您只能在运行时理解它。
如果您知道程序的输入是什么,那么您可以了解哪个类实例引用。
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
}
}
}
在上面的代码中,您可以理解将调用类B
方法。
总结是 - 您必须了解您的代码,识别输入,然后您才能理解在运行时调用哪个类。否则调试是最佳做法。
答案 1 :(得分:1)
如果您以这种方式创建对象
I1 i=new c1();
然后i.m1()
将调用class c1
如果
I1 i=new c2();
然后i.m1()
将调用class c2
如果您不知道如何创建对象并且您只有引用,那么抱歉,您只能在运行时找到它Run time Polymorphism