<멤버변수에 대한 오버라이딩>
- 슈퍼클래스로부터 상속받은 멤버변수와 동일한 이름의 변수를 서브클래스에서 선언하면
메서드 오버라이딩과 마찬가지로 멤버변수에 대한 은닉이 발생하여
슈퍼클래스의 멤버변수는 보이지 않는다. 서브클래스의 멤버변수에만 접근 가능해진다
<레퍼런스 super>
- 레퍼런스 this와 마찬가지로 인스턴스의 주소를 저장하는 참조변수
- 레퍼런스 this는 자신의 인스턴스 주소를 저장하는 반면
레퍼런스 super는 부모의 인스턴스 주소를 저장한다.
- 메서드(또는 변수) 오버라이딩으로 인해 슈퍼클래스의 멤버가 은닉되었을 때
서브클래스에서 슈퍼클래스의 은닉된 멤버에 접근하기 위해 사용한다.
- super.super 형식처럼 super 키워드를 중첩해서 사용할 수 없다.
✍
public class test9 {
public static void main(String[] args) {
Child c = new Child();
Parent p = new Parent();
System.out.println("<서브클래스 메서드 호출>");
c.parent();
System.out.println();
System.out.println("<슈퍼클래스 메서드 호출>");
p.parent();
}
}
class Parent { // 슈퍼클래스
String name = "슈퍼클래스";
public void parent() {
System.out.println("Parent");
}
}
class Child extends Parent { // 상속
String name = "서브클래스";
public void parent() { // 메서드 오버라이딩
System.out.println("Child");
System.out.println("this.name : " + this.name); // Child 자기 자신의 주소를 가리킴
System.out.println("super.name : " + super.name); // 슈퍼클래스의 name을 가리킴
}
}
'개발 > Java' 카테고리의 다른 글
[Java] 레퍼런스 형변환 (0) | 2023.02.10 |
---|---|
[Java] 상속에서의 생성자 (0) | 2023.02.09 |
[Java] 메서드 오버라이딩(Method Overriding) (0) | 2023.02.07 |
[Java] 접근제한자 (0) | 2023.02.07 |
[Java] 상속 (0) | 2023.02.06 |