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,我被分配到一个项目中,我的工作是在现有系统中实现一个功能。此功能需要添加到两个单独的类中。这两个类都扩展了同一个超类,但是向这个超类中添加特性是没有意义的。在这两个独立的类中实现相同功能而不需要太多代码重复的最佳方法是什么。简单的方法是将此功能实现到一个静态类中,然后在需要此额外功能的两个类中使用静态方法,但这种设计似乎很糟糕 是否有任何类型的设计可以用来实现类似的东西,或者我遇到了这个问题,只是在层次结构中显示了一个更大的问题,应该加以解决,而不是试图在它上面工作?Java没有独立的“静态”类

我被分配到一个项目中,我的工作是在现有系统中实现一个功能。此功能需要添加到两个单独的类中。这两个类都扩展了同一个超类,但是向这个超类中添加特性是没有意义的。在这两个独立的类中实现相同功能而不需要太多代码重复的最佳方法是什么。简单的方法是将此功能实现到一个静态类中,然后在需要此额外功能的两个类中使用静态方法,但这种设计似乎很糟糕


是否有任何类型的设计可以用来实现类似的东西,或者我遇到了这个问题,只是在层次结构中显示了一个更大的问题,应该加以解决,而不是试图在它上面工作?

Java没有独立的“静态”类,因此这是不可能的,因为它甚至不可能。至于静态方法的使用,如果您讨论的是无状态实用程序方法,那么这也没关系

我自己,我想我应该通过组合和接口来解决这个问题:

  • 为我想要的功能创建一个界面
  • 创建此接口的具体实例
  • 给出接口的两个类字段
  • 加上接口的getter和setter方法
  • 如果类本身必须有新的行为,那么让它们实现接口,然后让这些类通过调用接口方法中包含的对象的方法来“间接”获得行为


很抱歉,这个答案有点含糊不清,过于笼统。如果你需要从我这里或其他任何人那里得到更具体的建议,那么请考虑告诉我们更多你的问题的细节。< /P> < P>确定新功能依赖的这两个类的共同特征。然后,将这些功能提取到一个接口,修改两个类以实现该接口,并将新功能代码放入其自己的类中(或者可能是某个静态方法,例如
NewFeature.doTheThing(newfeatureable toWhat)
),并使其在这些接口上运行

如果现有类必须从与“新要素”相关的方法获取信息/调用方法,则为它们提供一个作为新要素类实例的
NewFeature
字段,并使它们与该对象交互。伪ish代码:

interface NewFeaturable {
    int getRelevantInfo ();
}

class NewFeature {
    final NewFeaturable object;
    NewFeature (NewFeaturable object) { this.object = object; }
    void doSomething () { int x = object.getRelevantInfo(); ... }
}

class ExistingClass extends Base implements NewFeaturable {
    final NewFeature feature;
    ExistingClass () { ...; feature = new NewFeature(this); }
    @Override int getRelevantInfo () { ... }
    void doSomethingNew () { feature.doSomething(); }
}
请注意
新的NewFeature(this)
,因为
现有类的子类在调用时不会完全构造。如果是一个问题,考虑推迟<代码>特性>代码>直到需要。

很多细节取决于您的具体情况,但希望您能大致了解。

是的,组成和接口。1+