本帖最后由 ﹏Lifeヽ 于 2013-6-28 22:11 编辑
(1)A aa = new B();
通过aa.的是基类(A)的方法和字段,(调用B里面派生自A类的部分 )!前提是被调用的方法和字段必须声明为public ,如果在同一个类中则不必声明为public
(2)B aa = new B();
通过aa.调用子类的方法和字段!前提是被调用的方法和字段必须声明为public 如果在同一个类中则不必声明为public
扩展:
B派生自A,那么显然B是A的扩展,也就是说B具备所有A具备的特性,
而且还有自身的特性,因此从类的实例化后的占用空间来看,B的对象空间比A的对象要大,
而且空间的一部分结构是和A一致的。A *a=new B();这个指定了a是A类型的指针,
但是实例化是来自B,因此new B()这句话产生的类空间有一部分B自由特性的东西a将无法应用到,
那么a所指向的空间智能访问到B里面派生自A类的部分,其余部分将被丢弃,这些丢弃的空间会在以后分配给其它资源 |