nho*_*er9 1 java oop abstract-class overriding
在Java中,我最近有几个项目,我使用这样的设计模式:
public abstract class A {
public abstract int getProperty();
}
public class B extends A {
private static final int PROPERTY = 5;
@Override
public int getProperty() {
return PROPERTY;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以getProperty()在类的任何成员上调用抽象方法A.但是,这似乎不实用 - 似乎应该有一些方法来简单地覆盖属性本身,以避免getProperty()在每个扩展的类中重复该方法A.
像这样的东西:
public abstract class A {
public static abstract int PROPERTY;
}
public class B extends A {
@Override
public static int PROPERTY = 5;
}
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?如果是这样,怎么样?否则,为什么不呢?
您不能"覆盖"字段,因为只有方法可以具有覆盖(并且不允许它们为静态或私有).
您可以通过使方法非抽象,并为子类提供受保护的字段来实现您想要的效果,如下所示:
public abstract class A {
protected int propValue = 5;
public int getProperty() {
return propValue;
}
}
public class B extends A {
public B() {
propValue = 13;
}
}
Run Code Online (Sandbox Code Playgroud)
这个技巧让A子类将一个新值"推"到它们的超类的上下文中,使得效果类似于"覆盖"而没有实际覆盖.