자식 클래스가 부모 클래스를 상속받게 되었을 때 둘 다 동일한 타입과 이름의 변수가 존재하거나 매서드들이 오버 라이딩되어버리면 더 이상 부모의 것이 아닌 자식의 성분이 되어버립니다. 그래서 부모의 것, 자식의 것을 구분 짓기 위한 식별자 this와 super에 대해 알아보려고 합니다.
이번에는 child(name, number) 를 통해 이름과 나이가 입력된 객체를 선언하겠습니다.
child child2 = new child("Chris",20); 로 자식객체 하나를 만들었습니다.
그런데 부모의 이름과 나이 역시 자식과 동일하게 Chris, 20살이 되어버렸습니다.
일단 복습하자면 자식 생성자가 생성될 때는 부모의 객체를 먼저 생성한다고 했습니다. 아무것도 입력되어 있지 않으면 super(); 가 호출됩니다.
하지만 여기에는 super(name, numer)라는 매개변수가 있는 부모의 객체를 생성하지만 불행히도 "Chris"와 20 이 부모 자식 생성자 두 군데에 동일하게 입력되기 때문에 부모와 자식 이름 둘 다 Chris 20살이 되어버렸습니다.
부모님의 이름과 나이를 다시 수정해 보겠습니다. 이전에 다뤘듯이 동일한 변수명과 오버라이딩 된 매소드 때문에 위 코드에서는 부모님의 이름과 나이를 변경할 수 있는 방법이 없습니다.
오버 라이딩하지 말고 changeVariable()의 이름을 각기 다르게 만든다면 부모님의 이름과 나이를 변경할 수 있습니다. 그리고 super를 이용한 방법이 있습니다.
changeVariable()에서 this 가 super로 바뀌었습니다.
super와 this를 통해 name 과 number 가 누구의 변수인지를 구별해 주고 있습니다. 즉 super는 부모의 것을 의미하고 this는 자식의 것 현재 클래스의 것을 나타냅니다. super.name 은 Denial이며 this.name 은 Chris입니다.
'자바' 카테고리의 다른 글
클래스변수, 인스턴스변수, 지역변수 (0) | 2019.10.04 |
---|---|
오버로딩과 오버라이딩의 차이 (0) | 2019.09.27 |
오버라이딩, overriding (0) | 2019.09.21 |
오버로딩, 오버라이딩 (0) | 2019.09.06 |
상속 (0) | 2019.09.03 |