1、 A x=new B(); x 是class A的对象 B x=new B(); x 是class B的对象2、 A x=new B();x依然指向AA是B的基类,派生自B的对象初始化B时必然会初始化A(通过构造函数),而派生自A的对象初始化A时不会初始化B。
1. A x=new B(); x指向B2. B x=new B(); x指向B 哦知道: A x=new A(); A x=new B();这两者没有区别(通过在IDE中 x 后面打个点 x. 可以看出它们是一致的) 可为什么不干脆用前者而要用后者呢这两者当然有区别,前一个的x是一个A的实例,后一个的x实际是一个B的实例,对于后一个x而言,可以 (x as B).j (x as B).g() 或 ((B)x).j ((B)x).g() 前一个x只能调用属于类A的方法和属性。
俺只知道 A x=new A(); A x=new B(); 可以,但是 B x=new A(); B x=new B(); 就有错了,请大家指正
B继承自A,A是父类,B是A的子类。 声明为A的变量x当然能够引用B的实例(这也是多态的精髓)。 B x=new A();当然不对了。这是面向对象中多态的最基本概念,好好学一下。
A x=new B();
x 是class A的对象
B x=new B();
x 是class B的对象2、
A x=new B();x依然指向AA是B的基类,派生自B的对象初始化B时必然会初始化A(通过构造函数),而派生自A的对象初始化A时不会初始化B。
哦知道: A x=new A();
A x=new B();这两者没有区别(通过在IDE中 x 后面打个点 x. 可以看出它们是一致的)
可为什么不干脆用前者而要用后者呢这两者当然有区别,前一个的x是一个A的实例,后一个的x实际是一个B的实例,对于后一个x而言,可以
(x as B).j
(x as B).g()
或
((B)x).j
((B)x).g()
前一个x只能调用属于类A的方法和属性。
A x=new A();
A x=new B();
可以,但是
B x=new A();
B x=new B();
就有错了,请大家指正
B x=new A();当然不对了。这是面向对象中多态的最基本概念,好好学一下。