2016-07-02 95 views
0

属性,在这里我用一个设计模式是这样我有几个项目最近。然而,这看起来很笨拙 - 似乎应该有一些方法来简单地覆盖属性本身,以避免在每个延伸A的类中重复getProperty()方法。覆盖在Java在Java中

事情是这样的:

public abstract class A { 
public static abstract int PROPERTY; 
} 

public class B extends A { 
@Override 
public static int PROPERTY = 5; 
} 

是这样的可能吗?如果是这样,怎么样?否则,为什么不呢?

+1

您不会覆盖Java中的类变量,而是隐藏它们。重写是例如方法。隐藏与重写不同 – Idos

+0

虽然您可以使用“静态”块:“静态”属性= 5; }' – Idos

+0

我不认为'static'对于这个问题是必不可少的。对我而言,OP看起来似乎想知道是否有办法提供不同的价值而无需替换整个方法。投票重新开放。 – dasblinkenlight

回答

4

您不能“覆盖”字段,因为只有方法可以覆盖(并且它们不允许为静态或私有)。

你可以实现你想通过该方法非抽象,并提供受保护的领域子类设置,这样的效果:

public abstract class A { 
    protected int propValue = 5; 
    public int getProperty() { 
     return propValue; 
    } 
} 

public class B extends A { 
    public B() { 
     propValue = 13; 
    } 
} 

这一招让A的子类的‘推’一个新的价值在他们的超类的上下文中,得到类似于“覆盖”的效果而没有实际的覆盖。