2014-11-01 3 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; 

} 

클래스 Box의 객체의 길이 변수를 30으로 덮어 쓰는 클래스 Box와 다른 클래스 BigBox를 만들었지 만 코드를 덮어 쓰려면 B1.length = 30이라고 쓰면 오류가 있음을 보여줍니다. 이해할 수 없다. 누구든지 나를 도울 수 있습니까?클래스 상자의 개체 변수가 다른 클래스에서 덮어 쓰지 않는 이유는 무엇입니까?

+2

를 ** 무슨 ** 오류? –

+1

클래스 멤버를 선언 할 때와 동일한 수준으로 문장 (예 : 과제)을 넣을 수 없습니다. – Seelenvirtuose

+0

@OliverCharlesworth 다음과 같은 오류 : 토큰 "길이"에 구문 오류가 발생했습니다.이 토큰 다음에 VariableDeclaratorId가 필요합니다. – aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

답변

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

감사합니다! 하지만 값을 덮어 쓰려면 메서드 나 이니셜 라이저 블록이 필요한 이유가 무엇인지 이해하지 못했습니다. 메소드 또는 블록이 B1.length가 B1의 인스턴스 변수이고 BigBox의 선언되지 않은 인스턴스 변수가 아니라는 것을 Java가 이해하는 데 도움이 되었기 때문입니까? –

+0

글쎄, 언어의 임의의 규칙에 의해, 단지 "당신은 거기에 넣을 수 없다"고합니다. 변수를 선언하고 초기화하는 명령문 만 블록 외부의 클래스에 넣을 수 없습니다. B1은 이미 초기화되었으므로 코드 블록 안에 있지 않으면 다시 액세스 할 수 없습니다. – markspace