哪个应该继承哪个?

Ara*_*raK 3 oop puzzle

这是一个无聊的学术OOP问题,但它不是一个功课.我从新手程序员那里得到了一个关于OOP的愚蠢教科书例子的问题.

想象一下,你正在设计一个Square类和一个Cube类,它应该继承哪个?

我看到了一段感情,但它是什么,我真的看不到!

你能不能给我一个关于OOP的逻辑论证.

Bob*_*man 22

都不是!由于正方形不是立方体,而立方体不是正方形,因此它们都不应该从另一个立方体继承.Square可以从多边形继承,而cube可以从多面体继承,但这两者本身是互斥的.


Sam*_*ijo 14

没有继承权.继承是一种"is-a"关系(嗯,有时甚至不是"is-a"关系,如下面的链接所示).立方体不是正方形,正方形不是立方体.

你将如何构建,这取决于你如何建模.你可以选择像立方体这样的东西有6个正方形(一个立方体不是,它有6个正方形;一个构图),或者一个立方体有一个侧面尺寸,就像方形一样.但是一旦没有"是-a",继承就会成为危险区域......

此外,在继承中,对基类有效的所有内容必须对派生类有效.这是Square扩展矩形问题.例如:

假设Cube继承Square:如果你的Square有一个方法changeArea(double area)和getSide(),那么Cube应该是可能的.但事实并非如此,因为立方体的面积是正方形面积的6倍(它有6个正方形).

假设Square继承Cube:如果你的Cube有一个setVolume(双卷)方法,一旦它没有音量,你的方块就会被打破

最后,如果要使用继承,可以创建GeometryObjectWithEqualSides对象,然后两者都可以继承它.:)


JP *_*oto 6

无论采用哪种方式都违反了Liskov替代原则.