2012-11-22 21 views
0

我還沒有找到合適的方法來執行此操作。假設Class Aa繼承自Class A。 我的想法是有機管局重寫兩個屬性,所以,當該功能正在從A.稱爲Java中的強制重寫字段

Class A { 
    String attr; 

    public void publicMethod(){ 
     .... 
     callMethod2(); 
     .... 
    } 

    protected method2(){ 
     .... 
     whatever = attr; 
    } 
} 

Class Aa extends A{ 
    //mandatory override? 
    attr 
} 

調用的例子,我可以從A,功能使用這些屬性:

Aa test = new Aa(); 
test.publicMethod(); 

我認爲我可以「不強制」,它會起作用,但是這不是直觀的,你必須設置某種特定的屬性。 任何解決方法?我可能正在過度工程這一點。

回答

2

您需要抽象關鍵字。但是,它僅適用於方法,不適用於屬性(無論如何是正確的方法)。

public abstract class AbstractBaseClass { 

    public void publicMethod(){ 
     // .... 
     String value = getAttribute(); 
     // .... 
    } 

    protected abstract String getAttribute(); 
} 

public class ConcreteClass extends AbstractBaseClass { 
    protected String getAttribute() { 
     // Lazy loading attr 
     if (attr==null) attr = "default value"; 
     return attr; 
    } 

    protected String attr; 
} 
+0

我在做類似的事情,但是這看起來很乾淨,謝謝! – dgmora