为什么派生类不能引用基类?

4
class A
{
}

class B : A
{
}

我知道B b = new A();是不可能的,但是这背后的解释是什么呢?
4个回答

17

这是因为继承的工作原理;一个女人或男人都是一个人,最终在基类中添加了一些其他属性,如性别。

如果您声明:

Man m = new Person()

那么你得到的是一个没有性别的人。

另一种方式可行,因为每个男人也都是一个人;-)


7
通过继承 A,您指定B的实例不仅是B,还是A。这在面向对象编程中称为继承。继承的优势在于能够将一般属性/行为抽象到一个公共类中,然后从中派生专门的类。专门的类可以更改现有功能(称为覆盖)或添加新功能。
但是,继承只能单向工作,而不能双向工作。不能将类A的对象视为B,因为B可能(并经常如此!)包含比A更多的功能。换句话说,B更具体而A更一般。
因此,您可以执行A a = new B();,但不能执行B b = new A();

1
因为B < A,所以无法创建一个等于B的新A。

1

A是一个基础,你从A派生出B。 A就像建筑的基础一样,基于基础你可以建造新的楼层。但是使用楼层你无法建造基础。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接