【问题标题】:Inheriting multiple methods in classes在类中继承多个方法
【发布时间】:2013-10-29 20:32:39
【问题描述】:

我有 2 种不同的方法需要在我的程序中重复,例如方法A和方法B。

程序有的部分需要调用methodA,有的需要调用methodB,有的需要两者都调用。这些方法的实现在整个程序中都是相同的。

我应该如何构造类和方法以减少重复?我首先想到的是我希望 Java 支持多重继承。

我想到的第二件事是将每个方法放在自己的接口中,并让类根据需要实现它们,但是方法的实现在整个程序中完全相同,因此必须定义每个类中的实现听起来都不是一个好主意。

如果我能说服团队中的其他人,我仅限于 Java 6. 7,因此 Java 8 附带的默认方法实现不是一个选项。

附言我意识到这个问题的标题很糟糕,但我想不出一种简单的方法来解释这个问题。有的话请推荐更好的。

【问题讨论】:

  • 似乎很适合定义interface
  • @sᴜʀᴇsʜᴀᴛᴛᴀ,是的,但是方法的实现在各个类中完全相同。定义接口不会要求我重新定义每个类中的方法吗?
  • 不清楚为什么不能简单地从定义这两种方法的基类扩展。示例代码会有所帮助。
  • 如果实现没有改变,你应该使用static 方法。该方法不需要在类中就可以在类中使用它。
  • @JBNizet,基本上,我需要类似 [this][stackoverflow.com/a/18286258/1253747],但我不能使用 Java 8。编辑您的更新:因为正如我上面提到的,某些类需要 A,有些人需要 B,有些人两者都需要。

标签: java inheritance interface


【解决方案1】:

在我的头顶:

public interface Foo{  
  public Object processA(Object first);
  public Object processB(Ojbect second);
}

public abstract class AbstractFoo implements Foo{
   protected AbstractFoo(){}

   public Object processA(Object o){
       // do stuff
       return null;
   }

   public Object processB(Object o){
       // do more stuff
       return null;
   }
 }

 public class ConcreteFoo extends AbstractFoo {
 }

【讨论】:

    【解决方案2】:

    如果这是重构代码的一部分,为什么不能将 重复代码 放在一边(可能是私有的)methodC 并从两者中调用它方法?

    【讨论】:

      【解决方案3】:

      你应该有 2 个接口,但你可以让一个类实现这两个接口。

      【讨论】:

        【解决方案4】:

        那要看你写的是什么类型的程序。如果是web系统,我觉得你应该把这两个都建起来,因为层是必须的。

        【讨论】:

          猜你喜欢
          • 2021-12-19
          • 1970-01-01
          • 2013-05-20
          • 1970-01-01
          • 2015-11-16
          • 2018-01-05
          • 2011-03-03
          • 2014-10-09
          • 1970-01-01
          相关资源
          最近更新 更多