可以那么认为,但有一点要明确A var1= new B();这仅仅是继承关系,并未完全体现多态特性,但多态特性是建立在继承的基础上,类似这样
public Interface IA
{
void dosomething();
}
public class B:IA
{
public void dosomething(){}
}
public class C:IA
{
public void dosomething(){}
}
IA a1= new B();
a1. dosomething();
IA a2= new C();
a2. dosomething();
为何不是呢,我很奇怪,为何你既然内存分配,也知道多态,那么为何还有这个疑问[/quote]
其实我是猜的,不知道对不对,来求证一下,
还有一问就是
A var1= new B();
和
B var2= new B();
var1和var2分配的空间是一样的,但var1就可以实现多态,而var2不能,对吗?
类的实例是个引用类型
你先恶补一下值类型和引用类型
A var1= new A()是实例化了一个类A,并在内存中开辟空间存放里面的属性和字段,然后将引用保存在var1这个对象中
这跟A var1= new B()开辟的空间当然是不一样的[/quote]
我当然明白值类型和引用类型,引用类型其实就相当一个指针,指向堆里一块区域的首地址,这块区域就是开辟存放类属性和字段的空间嘛,我想知道 new A()和0 new B()开辟的空间不一样在哪里,是不是子类的空间一定是大于(或=)父类的空间呢?