2013-11-24 26 views
0

我不知道我的代碼有什麼問題。我想在我的info()方法中顯示b(10)的值,但是當我運行此代碼時,b的值爲0.爲什麼會發生這種情況?訪問另一個類的私有變量?

class Alpha { 
    public int a = 5; 
    public void info() { 
     System.out.println("a = " + a); 
     Beta3 betaku; 
     betaku = new Beta3(); 
     System.out.println("b = " + betaku.perolehB()); 
     System.out.println("Dipanggil pada " + this.getClass().getName()); 
     System.out.println("----------"); 
    } 
} 

這裏的主類:你main()方法,beta_ku.info();

class Beta3 extends Alpha { 
private int b; 
public void isiB(int b){ 
    this.b=b; 
    } 
public int perolehB(){ 
    return b; 
    } 

public static void main(String[] args) { 
Beta3 varobjBeta; 
varobjBeta = new Beta3(); 
varobjBeta.isiB(10); 
varobjBeta.info(); 

Alpha varobjAlpha; 
varobjAlpha = new Alpha(); 
varobjAlpha.info(); 
} 
} 
+0

Thx所有回覆,, 我修正了上面的Beta3類中的一些代碼,但我仍然混淆瞭如何修復'Alpha'類,,, –

+0

在Alpha中,您顯示的是betaku實例的b值,那個betaku實例還沒有初始化那個值 – DGomez

+0

那麼我必須做什麼來顯示b值? 如果我刪除該行顯示錯誤,,, –

回答

0

這不會有任何效果,在信息方法,你寫了這個:

Beta3 betaku; 
betaku = new Beta3(); 
System.out.println("b = " + betaku.perolehB()); 

而且永遠會顯示0(由於B是不是在betaku實例初始化,所以默認爲0),您應刪除該行,並以某種方式傳遞b值,或覆蓋Beta3類中的info方法。

class Beta3 extends Alpha 
{ 
    //Another code 

    public void info() 
    { 
     // super.info(); if you wanna show the a value too 
     System.out.println("b=" + this.b); 
    } 

    //Some other code 
} 

或者,如果你需要訪問來自Alpha類值:

class Alpha 
{ 
    public void info(Beta3 aux) 
    { 
     this.info(); 
     aux.info(); 
    } 
} 

然後在主,你可以做這樣的事情:

public static void main(String[] args) 
{ 
     Beta3 varobjBeta; 
     varobjBeta = new Beta3(); 
     varobjBeta.isiB(10); 


     Alpha varobjAlpha; 
     varobjAlpha = new Alpha(); 
     varobjAlpha.info(varobjBeta); 
} 
+0

thx爲您的響應,但 如何將b值傳遞給alpha類, –

+0

傳遞值不是最好的選擇,最好是在Beta3中實現info方法類,並打印的b值沒有在阿爾法的信息方法 – DGomez

+0

thx ,,這解決了我的問題,,, –

0

製作線4。您撥打.info的其他電話不工作,因爲您尚未撥打isiB,而他們的默認值爲0.

0

每當您編寫新的Beta3時,都會創建一個新的Beta3類型對象,並帶有一對新屬性。如果您想要在之前的對象中設置的屬性的值,只需將該對象的引用傳遞給該方法並從中獲取該值即可。

0

這是因爲您要求實例Beta3,它永遠不會初始化其值,並且Java會自動將int初始化爲0(由於某種原因)。

beta_ku應該正確打印10,但varobjBeta不會設置其值b值。

0

您的info調用Alpha中的Beta3實例沒有設置其值b。因此,它初始化爲0

真正的原因發生這種情況是由於方式initial values被每JLS建立:

每個類變量,實例變量,或陣列組分與缺省值被創建時初始化。 ...

...這在一般情況下,意味着所有的圖元被初始化爲某種形式的零,所有的對象都被初始化爲null

你會如何解決這個問題?或者手動創建一個實例Beta3,並將其傳遞給Alpha的實例,或者僅使用Beta3來打印自己的info

注意到beta_ku會正常工作,如果您打電話給info - 對於這種情況,b定義爲10

0
betake = new Beta3(); 

當你實例化betake它只是將默認值分配給類Beta3的屬性。這裏Beta3類別的屬性是b

下面是類變量的缺省值的表按類型:

Type      default 
-------------------------------------------------------- 
    boolean      false 
    int       0 
    float      0.0 
    char      /u0000 
    reference type    null 

所以在你的類Beta3bint所以它得到的0默認值。你需要調用isiB(int b)設定預期值b或者你有寫一個參數CON結構設置的b

public Beta3(int bb){ 
    this.b= bb; 
} 

編輯

Beta3 betaku; 
    betake = new Beta3(); 
    betake.isiB(10); 
    System.out.println("b = " + betaku.perolehB()); 

希望它的價值幫助。

+0

Thx爲您的解釋,但如何獲得b的價值在 'System.out.println(「b = 「+ betaku.perolehB());'在Alpha類 –

+0

@AepSepepin只是創建一個參數化的con結構,就像我所顯示的那樣。 – Trying

+0

@AepSepepin看到我的編輯。 – Trying