我以为你不能将Parent
转换为Child
,并且只能将Child
转换为Parent
。或者至少如果你这样做,你将不被允许访问孩子的功能。将父母给予孩子 - 数组中的奇怪行为
然后我看到,Java将允许我明确投父到子:
a=(B)a;
,但不会允许
bArray[0]=a
或
a.testB();
然而,这是确定的:
bArray[1]=(B)a;
所以是这样的:
bArray[1].testB();
可有人请解释一下是怎么回事!?如何给父类授予一个子类的功能?为什么第一次尝试将数组放入阵列不起作用,但第二次尝试呢?它不应该一样吗?
class A {
public void testA() {
}
}
class B extends A {
public void testB() {
}
}
public class polymorphicObjects {
public static void main(String[] args) {
B bArray[] = new B[5];
A a = new A();
A ab = new B();
a = (B)a; //didnt think you could do this
bArray[0] = a; //but if I can the why doesnt this work?
a.testB(); //or this
bArray[1] =(B)a; //but this does work
bArray[1].testB(); //and so does this!?
}
}
** //为什么不工作?** - 因为您声明'a'是A型的,所以不要紧。 'A a =(B)new A();'。变量'a'仍然是'A'类型,因为那是你如何定义它的。无论如何。我确定其实这些都不起作用,如果你尝试运行它,你只会得到一个ClassCastException。仅仅因为它编译不会意味着它有效。 –
哈是类演员异常。我正在为OCJA学习,他们一直在向我抛出奇怪的东西。没想到打编译。谢谢你,先生。 – Mason