심심풀이 문제6 - 상속과 오버라이딩 (Heritage & Overriding)
뿌리튼튼 CS/Java2016. 10. 4. 20:59
문제
출력 결과는 무엇일까요?
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" 이 출력됩니다.
'뿌리튼튼 CS > Java' 카테고리의 다른 글
[추천] Set of Set 문제 및 Set.hashCode()고찰 (0) | 2019.04.18 |
---|---|
심심풀이 문제5 - 예외 처리 흐름 (Exception handling flow) (0) | 2016.10.04 |
심심풀이 문제4 - Object Assign (객체 대입) (0) | 2016.10.04 |
심심풀이 문제3 - Call by Value vs Call by Reference (0) | 2016.10.04 |
심심풀이 문제2 - String (0) | 2016.08.02 |