OOP Java:扩展类或创建子类的新实例更好吗?
我在面向对象编程的概念方面遇到了问题。 扩展类还是在类中创建新对象更好? 在什么情况下,您会扩展一个子类,而不是在调用类中创建该子类的新实例?这个例子是用Java编写的,但我想这些概念在其他OOP语言中也可以使用 我欣赏你的见解OOP Java:扩展类或创建子类的新实例更好吗?,java,oop,Java,Oop,我在面向对象编程的概念方面遇到了问题。 扩展类还是在类中创建新对象更好? 在什么情况下,您会扩展一个子类,而不是在调用类中创建该子类的新实例?这个例子是用Java编写的,但我想这些概念在其他OOP语言中也可以使用 我欣赏你的见解 class Mini { // I want to use the members of this class in another class int myInt; public Mini(int myInt){ this.myInt
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);
}
}
当类具有
is-a
关系时,可以对其进行扩展。例如,猫是一种动物。Cat
不是CatFood
,但它可能使用CatFood
在您的情况下,我不确定MiniMaxi
是什么,但它听起来不像Maxi
是一个Mini
,而是使用了一个
一般来说,试着支持组合(使用对象)而不是继承,特别是在java这样的单继承语言中。这个问题的最佳答案是另一个问题:类B使用类A还是类B构建在类A之上?您应该问自己的一个问题是,这个类还有什么其他用途?在子类中您还需要这个类的功能吗?您是否有更多的类也将继承mini 目标是避免重复。您需要更多地了解您的用例才能确定 只有在扩展顶级类并使用其功能和变量时,我才会真正继承。如果只是用于方法,则签名接口通常是更好的选择。
- 在第一种情况下,是一个名为has-a的聚合关系。类Maxi有一个属性,其类型为类Mini
- 第二个是继承关系,名为is-a。Mini类是Maxi类的子类,Maxi是Mini类的supclass。扩展类Maxi时,新类继承类Mini的所有字段(受保护或公共数据和方法)