【问题标题】:Java code reuse via method inheritance通过方法继承重用 Java 代码
【发布时间】:2014-01-01 15:24:09
【问题描述】:

我正在寻找一种在 Java 中实现代码重用的方法。 许多类应该有自己的(静态)数据。 他们都应该有一个共同的方法,但该方法应该对自己的数据进行操作。 下面的代码仅返回“BASE DATA”行,而所需的输出将是 BASE DATA、Above1 DATA、Above2 DATA 等等。

在 Java 中实现此目的的正确方法是什么?

public class Base{
  static private String data="BASE DATA";
  static void printData(){System.out.println(data);}

  public static void main(String[] args){
    Base.printData();
    Above1.printData();
    Above2.printData();
    Above3.printData();
  }

}//Base

class Above1 extends Base {
  static private String data="Above1 DATA";
}//Above1

class Above2 extends Base {
  static private String data="Above2 DATA";
}//Above2

class Above3 extends Base {
  static private String data="Above3 DATA";
}//Above3

【问题讨论】:

  • 你不能直接做。检查此以获取一些提示:stackoverflow.com/questions/5667764/…
  • 为什么data 需要是静态的?为什么不让它成为一个可以被子类覆盖的实例变量呢?您总是可以在某处将实际字符串定义为常量,然后将实例变量设置为这些常量。
  • 比@superEb 更进一步,在这个例子中你甚至不需要多个类。如果data 是一个实例变量,Above1Above2Above3 都可能只是同一个类的实例,因为它们在结构和功能上是相同的。
  • 看起来 pksiazek 建议的解决方法对我有用。数据需要是静态的(这只是现实生活中问题的一个例证)。似乎命令模式可能不起作用,原因有两个:1. 每个 Receiver 类都必须实现该功能 2. 作为接口的命令接口不允许静态抽象方法(但我听说在 Java 8 中发生了变化)。跨度>

标签: java inheritance methods reusability


【解决方案1】:

使用命令模式(或访问者,如果您愿意)。

该功能将作为传递给每个类的命令对象来实现。

然后该类将执行命令,将其静态数据传递给命令。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2015-08-23
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多