2017-06-22 51 views
0

说我有3类是这样的:构建超类

|Abstract Class: Building| 
    |int windows;   | 
    |int rooms;    | 
      | 
      | 
    |Abstract Class: House extends Building| 
    |int familyMembers;     | 
      | 
    |Class: MobileHome extends House| 
    |int wheels;     | 

现在我试图找出构建我的计划的最好方式,因为窗户和房间明显的数量将取决于House子类但是所有的建筑物都有窗户(至少为了这个程序他们会这样做)。所以这就是为什么他们在建筑类,但这些窗口的数量将取决于最低的子类,因为如果我做另一类名为豪宅延伸House明显一个豪宅将有更多的窗口比移动房屋。最后,我打算让我的建筑类和其他抽象类非常详细,最后有大约一百个不同的属性(我列出的字段只是示例),所以我想知道是否有人有任何想法一个干净的方式来构造一个MobileHome对象可能只是向构造函数调用传递一个对象,而不是构造函数需要数百个参数。

我在网上找到的所有例子都比较简单,通常只扩展一个类,只使用几个字段,因此使构造函数相对容易,所以我只是寻找一个优雅的大型解决方案。

附注:如果任何人有更好的方式来构建这些类的任何想法,也许通过分解更多我会很感激任何意见。

+0

我不确定你究竟是在做什么,或者你的'MobileHome'类实际需要看起来像什么,但听起来你可能想要使用默认值。说,根据你的要求,抽象的“建筑物”至少有一扇门和一个房间。所以你可以初始化为'1'。另外,如果需要,您可以提供setter方法来更改这些方法。如果你有一个'TwoRoomHouse',你可以默认将它们初始化为'2'。 – domsson

+2

哦,我忘了:如果你真的想到一个需要数百个字段(成员变量)的类,并因此在其构造函数中有数百个参数,那么在该类的设计中看起来根本是错误的。 – domsson

+1

你有很多参数的例子吗?我认为,如果将来有一些复杂性,您真正需要的是更加灵活:https://codingdelight.com/2014/01/16/favor-composition-over-inheritance-part-1/。 – Dherik

回答

0

与你超级类的想法是尽可能创建最通用的类​​与所有子类通用的字段和方法。因此,尽可能多地在父类中放入“数百个”参数。

如果你有很多参数,如果你可以将它们分组到类中,然后将这些类的对象作为你的成员,那么可能值得研究。例如在移动房屋中,而不是使用描述每个细节的字段来将细节分组在一起。基本上,如果你在一个类中有几百个字段,那么你的设计就有了一些东西,所有这些字段都必须有公共的子组。