如何存储特定于子类的信息?

时间:2016-06-28 07:18:32

标签: java inheritance

我有一个abstract class A,我希望它强制执行其子类以获得String TitleString Description属性。因此,如果B extends A,B保证具有属性Title,其值在B的所有实例中都相同。

如果Java允许静态抽象方法(即必须在每个子类中的静态方法),我只是写

public abstract class A {
    public static abstract String getTitle();
    public static abstract String getDescription();
}

我到目前为止提出的最好的想法是使用单独的枚举,它存储每个子类的标题和描述。这样我就可以通过一个循环查看所有Title并使用我需要的标题实例化一个子类(这是所需的行为)。不幸的是,这样我每次添加子类时都必须更改枚举。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

忘记混合静态内容和继承。只是要求麻烦。

相反,您转向OCP

abstract class A { 
   public final String getTitle () { return getTitleInternal(); }
   abstract String getTitleInternal();

class B extends A {
   @Override
   String getTitleInternal { maybe return some static value of B }

请注意,这比将保护字段放在A类上“更好”.OO和继承的本质是关于行为(所以,你说你想要某些方法是正确的。子类)。

编辑:再次阅读你的评论后;我很想提醒你

a)使用接口

b)专注于继承的构图

答案 1 :(得分:1)

您是否考虑过使用受保护的字段?

public abstract class A {
    protected String title;
    protected String description;
}

这样,在任何扩展A的类中都可以看到这两个字段。

public abstract class B extends A {
        public B(){
            title = ...
            description = ....
        }

    }