在 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;
}
}
然后我可以调用抽象方法getProperty()
在类的任何成员上A
。然而,这似乎很笨拙 - 似乎应该有某种方法来简单地覆盖属性本身以避免重复getProperty()
每个扩展类中的方法A
.
像这样的事情:
public abstract class A {
public static abstract int PROPERTY;
}
public class B extends A {
@Override
public static int PROPERTY = 5;
}
这样的事情可能吗?如果是这样,怎么办?否则,为什么不呢?
您不能“覆盖”字段,因为只有方法可以覆盖(并且不允许它们是静态或私有的)。
您可以通过使方法成为非抽象方法并为子类提供要设置的受保护字段来实现您想要的效果,如下所示:
public abstract class A {
protected int propValue = 5;
public int getProperty() {
return propValue;
}
}
public class B extends A {
public B() {
propValue = 13;
}
}
这个技巧让A
的子类将新值“推送”到其超类的上下文中,获得类似于“覆盖”的效果,而无需实际覆盖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)