【发布时间】:2013-01-19 07:20:12
【问题描述】:
public class InheritanceDemo {
public static void main(String[] args) {
ParentClass p = new ParentClass();
ChildClass c = new ChildClass();
//Casting ChildClass to ParentClass
ParentClass pc = new ChildClass();
pc.parentClassMethod(); //Output: Parent Class Method (as expected)
//Again Casting Parent Class to ChildClass explictly
//Question 1 for this code
ChildClass cp = (ChildClass) pc;
cp.parentClassMethod(); //Output: Parent Class Method (unexpected)
ChildClass cc1 = (ChildClass) new ParentClass();
cc1.parentClassMethod(); //Compiles, but Run Time Error
ChildClass cc2 = (ChildClass) p;
cc2.parentClassMethod(); //Compiles, but Run Time Error
}
}
class ParentClass {
public void parentClassMethod(){
System.out.println("Parent Class Method");
}
}
class ChildClass extends ParentClass {
public void ParentClassMethod(){
System.out.println("Parent Class Method From Child Class");
}
public void ChildClassMethod(){
System.out.println("Child Class Method");
}
}
问题1:
现在,我在 ParentClass 和 ChildClass 类(覆盖)中都有一个名为 parentClassMethod 的方法。当我将ParentClass转换为ChildClass然后调用parentClassMethod时,如果cp引用ChildClass,为什么它执行ParentClass方法而不是ChildClass的方法?
问题2:
(i)ChildClass cp = (ChildClass) pc;
(ii)ChildClass cc1 = (ChildClass) new ParentClass();
(iii)ChildClass cc2 = (ChildClass) p;
如果 (i) 工作正常,为什么不是 (ii) 或 (iii)?
因为在这两种情况下我都是从ParentClass 转换为ChildClass?
【问题讨论】:
标签: java casting type-conversion downcast