关注oo情况:
class A{
public A(){ System.out.println("Regular constructor of A"); }
public A(int i){ System.out.println("Constructor of A with " + i); }
}
class B extends A{
public B(){
super(3);
System.out.println("Regular constructor of B");
}
public B(int i){ System.out.println("Constructor of B with " + i); }
}
我正在练习 oo编程。如果我以这种方式发起一个对象会怎样?
B b1 = (B) new A();
然而,这样的类型演员对我来说没有意义。什么是输出?请说明原因。
答案 0 :(得分:3)
当您尝试强制转换为B时输出将是异常,如下所示:
Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
at Test.main(Test.java:16)
“只是一个A”的实例不是 B的实例,这就是演员失败的原因。
现在你可以这样做:
A a = new B();
B b = (B) a; // No exception!
因为在这种情况下,虽然a
变量的类型只是A
,但其值指的是B
的实例...所以演员成功了。
答案 1 :(得分:0)
B extends A
您无法将A转换为B,因为A 不 B
(B) A // class cast exception
具有相同的逻辑B是A所以
(A) B // true