【问题标题】:Is it OK to inherit from an empty class?从空类继承可以吗?
【发布时间】:2020-11-17 10:31:25
【问题描述】:

我有一个实体,它的 info1 或 info2 取决于其类型,但只应填写其中一个信息。这些信息具有完全不同的属性。所以我的实体看起来像这样:

public class SomeEntity {

  private SomeEntityType type;

  private Info1 info1;  

  private Info2 info2;  

}

所以我的问题是可以创建一些空的抽象类 Info 并从中继承 Info1 和 Info2 吗? (因为我认为此类 Info 类的数量会增加,我需要将所有此类信息添加到 SomeEntity)


public class Info1 extends Info {
  /* some properties */ 
}

public class Info2 extends Info {
  /* some properties */ 
}

public class SomeEntity {

  private SomeEntityType type;

  private Info info;   

}

【问题讨论】:

  • 如果技术上可行,为什么不呢?特别是,如果您要在未来实现他们的共同行为。
  • @KonradRudolph 这真的取决于空班有多胖? OP 似乎需要将他们的SomeEntityType type 直接移动到Info 类中(这可能是最好的sealed 然后在Java 15 中)并删除SomeEntity。这样他们就根本不需要空班了。
  • 好的,您的评论已删除。
  • @fluffy 我误读了这个问题。我的评论在这里根本不适用(事实上,如果有任何 OP 在这里避免使用胖接口),因此删除。

标签: java oop generics design-patterns


【解决方案1】:

一句话——是的,是的。但是,使用空的接口并让Info1Info2 实现它而不是扩展一个空类可能更习惯。

【讨论】:

    【解决方案2】:

    当然可以。这就是为什么有抽象类。您可以创建抽象类 Info 并编写一些抽象方法。您将在 Info1 和 Info2 类中实现这些方法。

    例子

    public abstract class Info {
        abstract void getInfo();
    }
    
    public class Info1 extends Info {
    
        void getInfo() {
            System.out.println("This is Info 1");
    
        }
    
    }
    
    public class Info2 extends Info {
    
        void getInfo() {
            System.out.println("This is Info 2");
    
        }
    
    }
    

    如你所见,我在 Info1 和 Info2 中实现了不同的方法。

    【讨论】:

    • 您的示例不需要抽象基类,使用接口就足够了。
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2017-11-11
    • 2014-11-09
    相关资源
    最近更新 更多