继承类vs通过在Java中创建类的Object来访问类的方法

时间:2014-08-13 11:10:13

标签: java oop

我有两个类(不是接口)。

假设类是A类和B类。

我想知道哪种方法更有效,更正确。

我想从B中访问A的方法。

两种方式: 1)B类扩展A(继承) 2)在B班:               创建A类的对象/实例,然后访问A类的方法。

哪一个更有效率和更正确?

2 个答案:

答案 0 :(得分:1)

这取决于。如果逻辑上正确,您应该只使用extends(for good OOP)。我学到的方法是使用"is a"测试。如果说B"是"然后延伸适合。

例如: 参加3个课程DogCanineFish

Dog "is a" Canine: this is logical and passes the "is a" test so we can use extends here
Dog "is a" Fish: this is not logical and should not inherit

如果您的班级BA的逻辑子类,那么请使用extends。

答案 1 :(得分:1)

您应该阅读一些有关OOP(面向对象编程)的文档。正如您可以在评论中看到的那样,我同意这取决于您的UseCase。设计对象的一个​​常见规则是“有一个”和“就是一个”关系。这意味着如果你可以说MyObject'有一个颜色'那么你将一个颜色成员作为一个属性添加到你的对象,如果你可以说MyObject'是一个'鸟,那么你将继承 - 也许 - 来自你写的对象MyAnimal之前。还有第三种方法可以做。如果你的方法是一个纯辅助方法 - 因此它在运行时不拥有一个状态,这意味着该方法是在一个对象中定义的,但不使用该对象的volatile成员进行计算 - 你可以编写一个公共静态方法和通过MyObject.myStaticMethod(String myArgument)访问它。你必须小心使用这种方法,因为如果你不知道如何使用它们,你可能遇到多种问题,例如:在编写测试时,或者如果您有集群环境。

但是现在这应该没事。因此,让您的对象在其属性和功能上细化。与您的对象类型无关的方法应放在捆绑此功能的其他对象中 - 例如打印机对象中的printString功能 - 或者如果方法是无状态的,则将它们放在一个静态无状态辅助对象中,该对象捆绑了您需要的功能。