编译不过的原因很明显,编译器已经给出了明确的解释,我想lz是不是想问编译器问什么不支持这种方式?
1、从OO的角度来看这个问题,BaseClass作为基类,它可以统一指代所有子类,这就是所谓的【多态】而已,所以从实际应用的角度来说,lz的这种用法本身就没有太大意义,正确的写法是:
public class TestA : BaseTest
{
public BaseClass test()
{
return ClassA的实例 ;
}
}
2、从更进一步深入OO语义的角度来说,你可以说ClassA IS A BaseClass ,但是不能说 BaseClass IS A ClassA,也就是说因为子类会对基类进行扩展,基类永远都是子类的一个子集,使用基类公开的接口来访问子类的实例是不会发生任何问题的,而子类却很可能是基类的超集,也就是说,不能通过子类去访问基类的实例,存在运行时异常的风险!这也是【继承】的重要特性,简单地说,基类可以作为所有子类的代表给对外交互,而子类不能代表基类!