2011-01-27 3 views
10

어떻게하면됩니까?멤버 변수와 로컬 메서드 변수가 같은 이름을 가질 수 있습니까?

class Test { 
    private int var1; 

    public Test(int var1) { 
     var1 = var1; //set the member variable to what was passed in 
    } 
} 

확실한 대답이있을 것입니다. 지금 당장 나를 피하고있어.

+0

좋은 코드를 한번보세요. 정확히 this ('this.x = x')가 setter와 생성자에 사용된다는 것을 알 수 있습니다. 새로운 이름을 발명 할 필요가 없습니다. – maaartinus

답변

19

예, 동일한 이름을 공유 할 수 있습니다. 그러나, 인스턴스 변수를 참조하기 위해, 당신은 this 접두사를 사용해야합니다

public Test(int var1) { 
    this.var1 = var1; 
} 
+1

그래서 "this"는 일반적으로 선택 사항입니까? 그러나이 경우 이름 충돌 이후로 필자는 그것을 필요로합니까? 나는 그것을 정확하게 이해하고 있는가? – Greg

+1

@ 그렉 - 정확하게. –

+2

이 경우 이름이 충돌하기 때문에 * 필요하지 않습니다. 다른 (특정) 범위에서 참조를 가져 오도록 JVM에 지시해야합니다. "감독자." 비슷하게 작동하지만 확장하는 클래스에서 변수/메소드를 가져옵니다 ("더 큰"범위). 일부 언어는 "글로벌"을 제공하기까지합니다. 타입 변경자는 사용할 수 있지만 Java는 사용할 수 없습니다. – Dolph

2

예, 우리는 할 수 있습니다. 그러나 단지 "할 수있다". 좋지 않아.

+3

-1 "좋지 않다"는 도움이되지 않습니다. 게다가,이 패턴이 "좋은"일반적인 패턴이 있습니다. – Dolph

+0

나는 나의 말을 알아 차릴 것이다. 사람들은 내 대답에서 내가 무엇을 의미 하는지를 알기를 바랍니다. –

+2

당신의 대답이 무슨 뜻인지 모르겠습니까? – jzd

4

가능하지만 로컬 변수는 클래스 변수를 숨 깁니다.

관련 문제