Strong Root


문제


출력 결과는 무엇일까요?


1
2
3
4
5
6
7
8
9
10
11
public class Person {
    public String name = "CGun";
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return 29;
    }
}
cs



1
2
3
4
5
6
7
public class Man extends Person {
    public String name = "CGun2";
 
    public int getAge() {
        return 30;
    }
}
cs



1
2
3
4
5
6
7
public class Test {
    public static void main(String[] args) {
        Man m = new Man();
        
        System.out.println(m.getName() + ", " + m.getAge());
    }
}
cs
















정답







해설


틀린 분 많으시죠?


상속시, 함수 오버라이딩은 많이들 아시겠지만 변수 오버라이딩에 대해서는 모르는 분이 많으실 겁니다.



변수는 오버라이딩되지 않습니다. (자식에 의해 덮어써지지 않고 계속 살아있습니다)


재미있는 결과를 더 알려드리겠습니다.



1
2
3
4
Man m = new Man();
 
System.out.println(m.name);    // CGun2
System.out.println(((Person) m).name);    // CGun
cs


3라인은 Man 의 name 값인 "CGun2" 가 출력되며,


4라인은 Person 의 name 값인 "CGun" 이 출력됩니다.