我遇到了面向对象编程概念的问题。 扩展类或在类中创建新对象更好吗? 在哪种情况下,您是否会扩展子类而不是在调用类中创建该子类的新实例?这个例子是用Java编写的,但我想这些概念可以在其他OOP语言中使用。
感谢您的见解
class Mini {
// I want to use the members of this class in another class
int myInt;
public Mini(int myInt){
this.myInt = myInt;
}
public int myMethod(){
return this.myInt;
}
}
// should I create a new instance of Mini here?
class Maxi {
Mini myMini = new Mini(5);
public Maxi(){
int miniInt = myMini.myMethod();
System.out.print(miniInt );
}
}
// or should I have Maxi extend Mini?
class Maxi extends Mini {
public Maxi(int myInt){
System.out.print(this.myInt);
}
}
答案 0 :(得分:4)
在类具有is-a
关系时扩展它。例如,Cat
是Animal
。 Cat
不是CatFood
,但可能使用 CatFood
。
在您的情况下,我不确定MiniMaxi
是什么,但听起来Maxi
不是Mini
,而是使用了{{1}}。
通常,尝试使用组合(使用对象)而不是继承,尤其是在像java这样的单继承语言中。
答案 1 :(得分:1)
该问题的最佳答案是另一个问题:B类是使用A类还是B类建立在A类上?
答案 2 :(得分:0)
你应该问自己一个问题是这门课有什么其他用途?你还需要子类中这个类的功能吗?你会有更多的课程继承迷你吗?
目标是保存重复。您需要了解有关您的用例的更多信息。
如果你有不止一件事扩展顶级类并使用它的功能和变量,我真的只会继承。如果你只是用于方法签名界面通常是一个更好的选择。
答案 3 :(得分:0)
答案 4 :(得分:0)
“is-a”和“has-a”之间的区别非常重要和关键。如果您不确定“is-a”关系,请不要使用继承。因此,如果您知道概念上B不是A,那么就不要为B继承。另外如果您想从类中继承只是为了重用某些功能,那就永远不要这样做 - 使用“has-a”组合/聚合技术