OOP Java:更好地扩展类或创建子类的新实例?

时间:2013-10-28 18:02:47

标签: 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 = 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);
    }
}

5 个答案:

答案 0 :(得分:4)

在类具有is-a关系时扩展它。例如,CatAnimalCat不是CatFood,但可能使用 CatFood

在您的情况下,我不确定MiniMaxi是什么,但听起来Maxi不是Mini,而是使用了{{1}}。

通常,尝试使用组合(使用对象)而不是继承,尤其是在像java这样的单继承语言中。

答案 1 :(得分:1)

该问题的最佳答案是另一个问题:B类是使用A类还是B类建立在A类上?

答案 2 :(得分:0)

你应该问自己一个问题是这门课有什么其他用途?你还需要子类中这个类的功能吗?你会有更多的课程继承迷你吗?

目标是保存重复。您需要了解有关您的用例的更多信息。

如果你有不止一件事扩展顶级类并使用它的功能和变量,我真的只会继承。如果你只是用于方法签名界面通常是一个更好的选择。

答案 3 :(得分:0)

  • 第一种情况是聚合关系,名为has-a。 Maxi类有一个属性,类型为Mini类。
  • 第二个是继承关系,名为Is-a。 Class Mini是Maxi类的子类,Maxi是Mini类的超类。当扩展类Maxi时,新类继承Mini类的所有字段(受保护或公共数据和方法)。

答案 4 :(得分:0)

“is-a”和“has-a”之间的区别非常重要和关键。如果您不确定“is-a”关系,请不要使用继承。因此,如果您知道概念上B不是A,那么就不要为B继承。另外如果您想从类中继承只是为了重用某些功能,那就永远不要这样做 - 使用“has-a”组合/聚合技术