개발/Java

[Java] super()

suniverse 2023. 2. 9. 22:24

<멤버변수에 대한 오버라이딩> 

- 슈퍼클래스로부터 상속받은 멤버변수와 동일한 이름의 변수를 서브클래스에서 선언하면

  메서드 오버라이딩과 마찬가지로 멤버변수에 대한 은닉이 발생하여

  슈퍼클래스의 멤버변수는 보이지 않는다. 서브클래스의 멤버변수에만 접근 가능해진다 

 

<레퍼런스 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을 가리킴 
	}
}