plz帮助我理解下面片段的第2行上的mehtod调用,它调用了Orange类的bMethod(),即使Orange对象在第1行被转换为Fig类型
interface a{public void aMethod();}
interface b{public void bMethod();}
interface c extends a,b{public void cMethod();}
class Fig implements b{
@Override
public void bMethod() {
System.out.println("Fig a");
}
}
class Orange extends Fig implements c{
@Override
public void aMethod() {
System.out.println("Orange a");
}
@Override
public void bMethod(){
System.out.println("Orange b");
}
@Override
public void cMethod() {
System.out.println("Orange c");
}
}
public class Q71 {
public static void main(String...args){
Fig e = (Fig)(new Orange()); //line 1 --
e.bMethod(); //line 2--invokes Orange's bMethod()?
}
}
Plz帮助我无法用正确的理由弄清楚运行时方法调用? 提前致谢
答案 0 :(得分:0)
多态性在这里起作用。
变量' e'正在引用一个子对象' Orange'。 Orange已经覆盖了' bMethod()',因此对于类型为' Orange'的对象,方法将输出' Orange b'。当在第2行调用bMethod()时,它调用了对象的方法并输出了' Orange b'而不是'图a'。
为了检查,只需评论被覆盖的' bMethod()'在Orange类中,它将调用父调用方法打印'图a'。
答案 1 :(得分:0)
在Java中,它非常简单,无论你怎么称呼它,一切都取决于你如何创建你的实例。
因此,当您创建isntance new Orange()
时,它将始终为橙色实例,并且无论您是否投射它都会使用橙色方法。
此行Fig e = (Fig)(new Orange());
与此Fig e = new Orange();