Java - 내부 클래스에서 동일 이름의 바깥 변수 접근
바깥 클래스의 인스턴스 변수 이름과,
내부 클래스의 인스턴스 변수 이름이 같은 경우 어떻게 되는가
Shdowing.class
public class Shdowing {
public int value = 1;
class Inner {
public int value = 2;
void go() {
int value = 3;
System.out.println("value is " + value);
System.out.println("this value is " + this.value);
System.out.println("class value is " + Shdowing.this.value);
}
}
public static void main(String[] args) {
Shdowing main = new Shdowing();
Inner inner = main.new Inner();
inner.go();
}
}
value is 3
this value is 2
class value is 1
동일한 이름이 주어진 value 호출에는 코드블록으로부터 가장 가까운 것을 호출하는 것 디폴트이다.
또는 구체적인 정보가 있다면 우선권이 더 높다.
- go() 메소드는 지역 변수 value 와 가까우므로 우선권이 높아 출력된다.
💡
지역변수 외의 가려져 안보이는 것을 영어로 Shadowing 이라한다.
블록 코드에 int value 있으므로 바깥의 public int value 변수들은 가려진다.
블록 코드에 int value 있으므로 바깥의 public int value 변수들은 가려진다.
외부 변수가 Shadowing 되어도 인스턴스의 참조를 사용하면 외부 변수에 접근할 수 있따.
- this.value
- 내부 클래스의 인스턴스로 접근
- 바깥클래스이름.this.value
- 바깥 클래스의 인스턴스로 접근
💡
프로그래밍은 명확한게 좋다. 이름이 같아 헷갈리므로 명확하게 구분해서 지어주자.