2010-11-10 92 views
1
package portale.interfaccia; 
public class PageIndex extends FlowPanel { 
    protected Integer prova; 

    private PageCenter center; 
    public PageIndex() { 
     this.center=new PageCenter(); 
     this.add(center);  
    } 
} 

package portale.interfaccia; 
public class PageCenter extends FlowPanel { 
    public PageCenter() { 
     super.prova=2; 
    } 
} 

爲什麼,如果prova受保護,我不能通過使用超級? CheersJava - 爲什麼保護不起作用在這個功能

回答

3

PageCenter從FlowPanel擴展而不是從PageIndex擴展。它看起來像FlowPanel沒有名爲prova

屬性如果你想PageCenter使用super關鍵字從PageIndex訪問受保護的屬性,那麼你應該從PageIndex延伸。

public class PageCenter extends PageIndex{ 

    public PageCenter(){ 
     prova = 2; 
    } 
} 

如果你想同時類從FlowPanel擴展,嘗試重構你的代碼,以便PageIndexPageCenter瞭解一些實用工具類。

public class ProvaUtility{ 

    private Integer prova; 

    public Integer getProva(){} 

    public void setProva(Integer p){} 
} 

然後,你可以使用這樣的:

public class PageIndex extends FlowPanel{ 

    private ProvaUtility utility; 

    private PageCenter center; 

    public PageIndex(ProvaUtility pu){ 

     this.utility = pu; 
     this.center = new PageCenter(pu); 
     this.add(this.center); 
    } 

    public Integer getProva(){ 
     return this.utility.getProva(); 
    } 
} 

public class PageCenter extends FlowPanel{ 

    private ProvaUtility utility; 

    public PageCenter(ProvaUtility u){ 
     this.utility = u; 
     this.utility.setProva(2); 
    } 
} 

如果各地通過這個引用不讓它爲你,請嘗試使用Singleton

class ProvaSingleton{ 

    private static ProvaSingleton instance = null; 

    private Integer prova; 

    private ProvaSingleton(){ 
     prova = 2; 
    } 

    public static ProvaSingleton getInstance(){ 

     if (instance == null){ 
      instance = new ProvaSingleton(); 
     } 
     return instance; 
    } 

    public Integer getProva(){ return this.prova;} 

    public void setProva(Integer p){this.prova = p;} 
} 

然後通過調用它:

ProvaInstance.getInstance().getProva()

+0

uhm ..但受保護的屬性應該顯示每個變量在相同的包否? – markzzz 2010-11-10 22:01:31

+1

相同的包,只要它延伸相同的對象。 PageCenter與PageIndex完全無關。 – 2010-11-10 22:04:16

+0

是啊,你的解決方案工作!唯一的問題是我需要傳遞每一次參考,並且我有很多擴展。謝謝:) – markzzz 2010-11-10 22:24:20

1

super在您的PageCenter類是指FlowPanel,因爲這是它正在擴展。

PageCenter無法知道它是不PageIndex對該對象的引用的部件的方式。

我相信你混淆了繼承和實例變量。

protected將允許當前類和從它繼承的任何類的訪問。它不允許同一包中的其他類訪問它。

+0

Arghhh ......沒錯,超級會將FlowPanel稱爲超類。呃... ...!那麼我怎樣才能分享整個包的變量? – markzzz 2010-11-10 22:02:30

+0

如果您想要在類之間共享變量,您必須將包含它的對象注入到所有想要共享它的對象中,或者創建一個具有默認保護和訪問權限的靜態變量。 (記住 - 有靜態,謹防線程) – Knubo 2010-11-10 22:05:11

+0

嗯,我沒有併發問題。我怎樣才能訪問一個靜態變量? – markzzz 2010-11-10 22:08:50

0

您必須使PageCenter擴展PageIndex。