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_Access Modifiers - Fatal编程技术网

Java 如何在一些子类之间共享代码?

Java 如何在一些子类之间共享代码?,java,oop,access-modifiers,Java,Oop,Access Modifiers,到目前为止,我有一个包含多个子类的抽象类,超过20个子类,并且有一个代码和变量,我只想在两个子类之间共享 如果我将方法和变量放在超类中,那么所有的子类都可以访问它们,但是我希望只有2个子类可以访问它们,并且基本上知道它们的存在。 有没有办法做到这一点 谢谢计算机科学中的所有问题都可以通过另一种间接方式来解决。借 因此,只需创建另一个抽象类来扩展基类,并添加您只需要在这些特定子类中添加的常见内容 上面的引述并不总是正确的,但至少在概念上,另一个有用的抽象通常是解决设计问题的最佳方法。您可以从基类扩

到目前为止,我有一个包含多个子类的抽象类,超过20个子类,并且有一个代码和变量,我只想在两个子类之间共享

如果我将方法和变量放在超类中,那么所有的子类都可以访问它们,但是我希望只有2个子类可以访问它们,并且基本上知道它们的存在。 有没有办法做到这一点

谢谢

计算机科学中的所有问题都可以通过另一种间接方式来解决。借

因此,只需创建另一个抽象类来扩展基类,并添加您只需要在这些特定子类中添加的常见内容


上面的引述并不总是正确的,但至少在概念上,另一个有用的抽象通常是解决设计问题的最佳方法。

您可以从基类扩展抽象类,将希望共享的方法放在这个类中,然后从新的中间件类扩展要共享方法的两个类。

让我们创建一个实际的示例,这样您就可以看到应该如何解决这个问题

我们有一门课叫“活着”。我们将使用它作为Dog、Wolf和Human的父类。我们需要狗和狼有办法咆哮,但人类没有

这是继承层次结构的示意图:

                             Alive  
                             /  \
                            /    \
                           /      \
                        Human    Canis
                                  / \
                                 /   \
                               Dog   Wolf    

您可以通过应用以下原则来解决此问题:创建一个新类,该类包含两个子类之间应该共享的功能,并在这两个子类中使用对新类实例的引用

通过这种方式,您将避免在子类和超类之间添加额外的层,并且您的代码将更加灵活和易于维护

当您觉得向一个超类添加一些共享功能并通过继承获得它并不自然时,这种方法几乎总是可取的。当你有疑问的时候,总是问问你自己,一个HAS-a关系组合是否比一个IS-a关系继承更合适


虽然将多个功能组合在一个超类中可能会有所帮助,但如果您需要在多个类之间共享单个功能,则可能更适合使用组合来实现它。

除了继承之外,您还可以使用组合。创建另一个类,将方法和变量放入其中,并在2个类中引用这个新类。另外,使用正确的打包和访问修饰符,您可以仅从这两个客户端类访问新类。
希望有帮助。

也许这两个子类应该扩展一个扩展基类的中间抽象类。Java中的类层次结构不限于两个级别:您能解释一下这两个类与其他类之间的区别吗?因为大多数人都建议使用多个级别的类,而您的问题可能更容易通过抽象类以外的接口解决。很可能您不需要继承,但您需要组合而非替换类。类并非真正用于在代码之间共享数据,而是用于建模常见行为。“说你有20个子类对我来说听起来像是一种代码味道。@AndyTurner说得更清楚一点,这是一个有点讽刺意味的引用。
                             Alive  
                             /  \
                            /    \
                           /      \
                        Human    Canis
                                  / \
                                 /   \
                               Dog   Wolf