Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在考虑其他选择之前,继承必须有多深? 我读过很多关于继承的陷阱和你可以考虑的其他选项的文章。_Oop_Inheritance - Fatal编程技术网

Oop 在考虑其他选择之前,继承必须有多深? 我读过很多关于继承的陷阱和你可以考虑的其他选项的文章。

Oop 在考虑其他选择之前,继承必须有多深? 我读过很多关于继承的陷阱和你可以考虑的其他选项的文章。,oop,inheritance,Oop,Inheritance,我从来没有理解过深层的继承层次。在考虑其他选项之前,继承必须有多深? < P>从我的经验来看,大多数设计良好的面向对象类应该是一级的,即,它们不应该扩展任何其他类(不包括基本的基类,如 java .lang.Objs< /Cl>)。此类类应声明为“final”(final在Java中,密封的在C#中) 少数类将被设计为基类。它们通常在继承树的第二级有子类。通常,它们有许多受保护的方法,其中一些方法是可重写的(虚拟的,非最终的),而另一些方法不是(最终的,非虚拟的)。例如,实现模板方法设计模式的类


我从来没有理解过深层的继承层次。在考虑其他选项之前,继承必须有多深?

< P>从我的经验来看,大多数设计良好的面向对象类应该是一级的,即,它们不应该扩展任何其他类(不包括基本的基类,如<代码> java .lang.Objs< /Cl>)。此类类应声明为“final”(
final
在Java中,密封的
在C#中)

少数类将被设计为基类。它们通常在继承树的第二级有子类。通常,它们有许多受保护的
方法,其中一些方法是可重写的(
虚拟的
,非最终的),而另一些方法不是(
最终的
,非虚拟的)。例如,实现模板方法设计模式的类通常会使模板方法本身不可重写

任何额外的子类(在第三级及以上)都应该是罕见的。我建议避免使用超过三个深度的库,除非您使用的是Java Swing这样的现有库,它的设计要求更高的继承级别(这并不意味着Swing的设计是好的)

在任何情况下,任何不打算用作基类的类都应声明为
final
/
sealed
,以防止或阻止继承滥用


这些建议与最近讨论OO和API设计的书籍一致,如“有效的Java”、“实用的API设计”和“C++的API设计”

“‘太多’是一个判断调用”—第一个链接的首要答案就是从这开始的。不可能有一个硬性的数字。我一直在寻找的答案,谢谢!