OOP如何创建对象的基础知识

时间:2011-02-12 08:33:16

标签: java oop

关注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();

然而,这样的类型演员对我来说没有意义。什么是输出?请说明原因。

2 个答案:

答案 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)

ClassCastException

B extends A

您无法将A转换为B,因为A B

(B) A // class cast exception

具有相同的逻辑B是A所以

(A) B // true