2014-11-01 31 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

相关问题