Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承类与通过在Java中创建类的对象来访问类的方法_Java_Oop - Fatal编程技术网

继承类与通过在Java中创建类的对象来访问类的方法

继承类与通过在Java中创建类的对象来访问类的方法,java,oop,Java,Oop,我有两个类没有接口 假设这些类是A类和B类 我想知道哪一种实施方式更有效、更正确 我想从B访问A的方法 两种方式: 1类B扩展了A继承 2在B类中: 创建类A的对象/实例,然后访问类A的方法 哪一个更有效和正确???这取决于。只有在逻辑正确的情况下,才应该为良好的OOP使用extends。我学习的方式是通过考试。如果说B是a,那么扩展就合适了 例如: 参加三个班:狗、狗和鱼 如果您的类B是a的逻辑子类,那么使用extends 您应该阅读一些关于OOP面向对象编程的文档。正如您在评论中看到的,我同

我有两个类没有接口

假设这些类是A类和B类

我想知道哪一种实施方式更有效、更正确

我想从B访问A的方法

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


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

这取决于。只有在逻辑正确的情况下,才应该为良好的OOP使用extends。我学习的方式是通过考试。如果说B是a,那么扩展就合适了

例如: 参加三个班:狗、狗和鱼


如果您的类B是a的逻辑子类,那么使用extends

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


但现在这应该是好的。因此,让您的对象在其属性和功能上更细粒度。与对象类型无关的方法应放在捆绑此功能的其他对象中(例如打印机对象中的printString功能),或者如果这些方法是无状态的,则将它们放在捆绑所需功能的静态无状态辅助对象中。

如果a是动物,B是狗,那么是的。这完全取决于A和B是如何关联的,如果它们是关联的,这取决于你在做什么,以及这些类之间是如何关联的。没有一个正确、有效的方法来做这件事。汽车将从汽车延伸出来,但汽车和ScalarMatrix或类似的东西并没有任何关系。你基本上问过什么更好:黄色还是xbox。设计原则说,如果有关系的话,你更喜欢第二种风格。如果是关系,则使用第一种样式。
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