我有一个abstract class A
,我希望它强制执行其子类以获得String Title
和String Description
属性。因此,如果B extends A
,B保证具有属性Title,其值在B的所有实例中都相同。
如果Java允许静态抽象方法(即必须在每个子类中的静态方法),我只是写
public abstract class A {
public static abstract String getTitle();
public static abstract String getDescription();
}
我到目前为止提出的最好的想法是使用单独的枚举,它存储每个子类的标题和描述。这样我就可以通过一个循环查看所有Title
并使用我需要的标题实例化一个子类(这是所需的行为)。不幸的是,这样我每次添加子类时都必须更改枚举。还有更好的方法吗?
答案 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 = ....
}
}