OOP Java: Better to extend a class or create a new instance of the subclass?
本问题已经有最佳答案,请猛点这里访问。
我很难理解面向对象编程的概念。扩展类或在类中创建新对象是否更好?在什么情况下,您会扩展子类而不是在调用类中创建该子类的新实例?这个例子是在Java中,但是我想象这些概念将在其他OOP语言中工作。
我欣赏你的见解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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); } } |
当类具有
在你的例子中,我不知道
一般来说,尝试使用构造函数(使用对象)继承,特别是在Java之类的单继承语言中。
这个问题的最佳答案是另一个问题:B类是使用A类还是建立在A类之上?
"IS-A"和"HAS-A"之间的区别非常重要和关键。如果你不确定"is-a"关系,就不要使用继承。因此,如果您知道概念上b不是a,那么不要对b使用继承。另外,如果您试图从类继承只是为了重用某些功能,那么永远不要使用"has-a"组合/聚合技术。
- 在第一种情况下是聚合关系,名为has-a。类maxi有一个属性,其类型为class mini。
- 第二种是继承关系,命名为is-a,class mini是class maxi的子类,maxi是class mini的父类。扩展类maxi时,新类继承类mini的所有字段(受保护或公共数据和方法)。
你应该问自己的一个问题是,这个类还有什么其他用途?您仍然需要这个类在子类中的功能吗?你会有更多的类来继承mini吗?
目标是保存复制。你需要更多地了解你的用例才能确定。
只有当您有多个扩展顶级类并使用其功能和变量时,我才会真正继承它。如果您只是使用方法签名,那么通常最好使用接口。