【问题标题】:java abstract class inheritancejava抽象类继承
【发布时间】:2014-04-11 18:22:21
【问题描述】:

我有一个抽象类,这个类在她的子类中扩展:

  • 我在这个 abstract 类上实现了一个方法,并创建了另一个 method abstracts
  • 实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。

小例子:

public abstract class Foo{

           //plus constructor and other stuff.

        public abstract void differentTypeOfImplementation();

        public void doSomething(Foo foo){
                        //do something with the generic Foo object passed
        }
}

我希望您对这种类型的实施提出意见,

问候。

【问题讨论】:

  • 看起来像一个普通的成语。不过,总的来说,StackOverflow 不适合征求意见,所以这个问题可能会被关闭。我认为 Stack Exchange 上有一个“代码审查”网站可能更合适。

标签: java inheritance


【解决方案1】:

这个问题可能过于开放,但您的解决方案非常好。

另一种方法是您可以使用 differentTypeOfImplementation() 创建一个接口,然后使用 doSomething 创建一个实用程序类。这样,您的子类也可以从其他类扩展。但是,如果子类偶尔会覆盖 doSomething,或者如果 doSomething 需要访问对象的内部状态,那么您所拥有的就是完全有效的。

【讨论】:

    【解决方案2】:

    在抽象类中实现方法是非常有效和可接受的设计。如果这个方法实现对于它的所有子类都是必要的,那么这就是要走的路。然而,在您的示例中 - 该方法的签名使它有点可疑 - 看起来您没有以任何方式使用超类状态。这意味着您也可以将此方法声明为static。

    【讨论】:

    • 对不起,我不明白为什么我必须声明它是静态的?你能说得更具体点吗?
    • @CiMat - 取决于您在方法实现中的确切意图 - 如果您没有访问任何实例级别状态(成员或其他非静态方法),那么您可以 将其声明为静态。我不是说你必须。这取决于。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2011-03-15
    • 1970-01-01
    • 2016-07-02
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多