2012-12-06 42 views
1

我目前正在研究一個hibernate項目(EJB和JSF),並且我有多個java類。父項的數據正在用JSF在前端進行更改,但是,它並未在子類中更新。我需要訪問子類中的數據來進行一些計算。任何想法如何將變量的值從父類傳遞給子類?Java擴展不更新

在此先感謝

例子:

父類

public class parent { 

    private String x = "a+"; 


    public String getx(){ 
     return x; 
    } 


    public void setx(String x){ 
     this.x = x; 
    } 

} 

子類

public class child extends parent{ 
    private String z; 

    public String getZ(){ 
     System.out.print(getx()); 
     return z; 
    } 
} 

主類

public static void main(String[] args) { 

     parent p = new parent(); 

     System.out.println("Original" + p.getx()); 

     p.setx("z"); 

     System.out.println(" Add z" +p.getx()); 

     child c = new child(); 

     System.out.println("child getx" +c.getx()); 


     p.setx("zZ"); 
     System.out.println("child getz" +c.getZ()); 
    } 
} 

結果。 原裝A +

添加Z Z

孩子的getX A +

A +孩子蓋茨空

+2

請分享相關的代碼。你描述的內容不可能發生。你的錯誤必須是別的。 – jahroy

+0

@jahroy,這是不正確的。代碼顯示了OP究竟做錯了什麼。 – SimonC

+1

@SimonC:jahroy在24分鐘前提交了評論; OP僅在8分鐘前發佈了代碼。即使如此,jahroy是正確的:OP描述的實際上並沒有發生,但他沒有做他所描述的。 –

回答

2

我不明白你期望在這裏。一切工作正常。

在你的例子中,你永遠不會打電話c.setX,那麼你爲什麼期望它打印除a+以外的任何東西? p是指完全不同的對象,並且與c沒有關係。因此,致電p.setx將不會對c產生影響。如果您想設置c.x,請致電c.setx("z")。做多態性,因爲child延伸parent,您可以調用的實例上parent中聲明的方法。

1

您在兩個不同的對象cp上設置'z'。爲了'c.getZ()返回zZ,您需要撥打c.setx("zZ")

+0

感謝您的快速回復,我在前臺工作的應用程序正在與「父母」進行交互。我需要從「孩子」得到更新的值。當我從孩子調用getx時,它將返回「a +」而不是更新的值 – user1817081

+0

@ user1817081 - 您誤解了繼承的概念。僅僅因爲C類擴展了P類,並不意味着每當有P的實例都會更新C的每個實例(謝天謝地)。 – jahroy

+0

好吧,我能夠通過在父級靜態中創建變量來獲得我想要做的事情,以便我可以從main訪問它。謝謝! – user1817081