关于继承的一些困惑

时间:2019-06-25 10:57:34

标签: oop inheritance language-agnostic

我正在阅读一本我不理解以下关于继承的3个问题的书:

1)首先,您不能在运行时更改从父类继承的实现,因为继承是在编译时定义的。

2)其次,通常更糟的是,父类通常会定义其子类的物理表示形式的至少一部分。由于继承将子类公开给其父类的实现细节,因此人们常说“继承破坏了封装”。

3)子类的实现与其父类的实现紧密相关,以至于父类实现的任何更改都将迫使子类进行更改。

上面提到的所有要点均未提及任何代码段,因此我在理解以上3个要点时遇到问题。

如果有人可以通过代码示例帮助我理解以上三点,以及每一点在代码中的影响方式和作用,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

1)首先,您不能更改从父级继承的实现   类是在运行时创建的,因为继承是在编译时定义的。

这意味着这两个类之间的继承关系是在您编写的代码中建立的,并且在编译后,当代码执行时,无法更改。

  

2)其次,通常更糟的是,父类通常至少定义   子类物理表示的一部分。因为继承   向子类公开其父级实现的详细信息,即   经常说“继承破坏封装”。

如果您将某些父类作为子类,则通常意味着该子类也像具有某些扩展名和/或替代差异的父类。一些属性或行为很常见,您可以访问它。两者之间存在一定程度的共享知识,您可以将其视为信息泄漏。如果要不惜一切代价保存封装,那您就要破坏它了(但是有充分的理由)。如果不是这样,则继承将毫无用处。

  

3)子类的实现变得与   父类的实现,即父类的任何更改   实施将迫使子类更改。

我没有这三个子句的上下文,但是是的,它们必须在一定程度上结合在一起,取决于具体情况,父级中的多少变化会影响子类。