【发布时间】:2016-07-10 13:11:01
【问题描述】:
//code-1
Emp1 emp11 = new Emp2();
((Emp2) emp11).displayEmp2();
//code-2
Emp1 emp11 = new Emp2();
emp11 = (Emp2) emp11; //line-1
(emp11).displayEmp2(); //line-2
class Emp1 {
public void displayEmp1(){
System.out.println("displayEmp1");
}
}
class Emp2 extends Emp1 {
public void displayEmp2(){
System.out.println("displayEmp2");
}
}
为什么 code-1 与 code-2 不同。 代码 1 执行成功,但代码 2 在第 2 行出现编译错误。 虽然,在两段代码中做同样的事情。 我知道它在编译期间将无法在超类中找到该方法。但我怀疑是否已经在第 1 行显式转换它,那么为什么它会引发编译错误。如果这样做,那么它也应该为 code-1 抛出错误。
【问题讨论】:
-
Emp1 emp11表示emp11是对Emp1的引用。再多的演员也不会改变这一点。 -
他们做的不一样。
标签: java inheritance casting polymorphism