2014-11-01 82 views
-3
public class Box{ 

    public int length,width,height; 
    public int volume; 
    Box(int i, int j, int k){ 
     this.length=i; 
     this.width=j; 
     this.height=k; 
    } 
    void setvolume(int i){ 
     this.volume=i; 
    } 
    int getvolume(){ 
     return volume; 
    } 
} 
class BigBox{ 

    Box B1=new Box(20,30,40); 
    B1.length=30; 

} 

我創建的類盒和另一個類BigBox它將覆蓋類框的對象的長度可變〜30。但是,當我寫的代碼B1.length = 30覆蓋它,它顯示了一個錯誤,我無法理解。誰能幫我嗎?爲什麼在另一個類中不會覆蓋類框對象的變量?

+2

**什麼**錯誤? – 2014-11-01 18:29:26

+1

您不能將聲明(如賦值)放在聲明類成員的相同級別。 – Seelenvirtuose 2014-11-01 18:33:34

+0

@OliverCharlesworth 像這樣錯誤:令牌「長度」的語法錯誤,VariableDeclaratorId在此令牌之後預期 – aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 2014-11-01 18:37:14

回答

3

您需要在代碼塊內部放置類似的分配,通常是方法或者可能是初始化塊。

class BigBox{ 
    public void someMethod() { 
    Box B1=new Box(20,30,40); 
    B1.length=30; 
    } 
} 

如果你真的想初始化一個實例變量,這將工作:

class BigBox{ 
    Box B1=new Box(20,30,40); 
    { 
     B1.length=30; 
    } 
} 
+0

謝謝!但我不明白爲什麼我們需要一個方法或一個初始化塊來覆蓋這個值?是否因爲方法或塊幫助java理解B1.length是B1的實例變量而不是BigBox的未聲明的實例變量? – 2014-11-02 05:09:03

+0

那麼,通過語言的任意規則,它只是說「你不能把它放在那裏」。您不能將語句放在塊之外的類中,只是聲明和初始化變量的語句。由於B1已經初始化,除非它在代碼塊內,否則不能再次訪問它。 – markspace 2014-11-02 05:57:19

相關問題