Java 상속 - super 부모 참조

부모와 자식 간 필드명이 같거나 메소드가 오버라이딩된 경우,
자식에서는 부모의 필드와 메소드를 사용할 수 없다.

사용할 수 없는 부모의 필드와 메소드를 호출하고 싶다면, super 키워드를 사용하여 부모를 참조하도록 한다.
super 는 부모 클래스에 대한 참조를 나타낸다.

아래 그림에서 value 와 world() 호출하고 싶다면 super 키워드를 사용한다.


코드로 확인해보기

src
└su (+)
    ├Child.Java (+)
    ├Parent.Java (+)
    └Main.Java (+)

Parent.java

package su;

public class Parent {

    public String value = "P";

    public void world() {
        System.out.println("this is Parent");
    }
}

Child.java

package su;

public class Child extends Parent {
    public String value = "C";

    @Override
    public void world() {
        System.out.println("this is Child");
    }

    public void call() {
        System.out.println("this is value = " + this.value);
        System.out.println("super is value = " + super.value);

        world();
        super.world();
    }
}

Main.java

package su;

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.call();
    }
}

실행 결과

this is value = C
super is value = P
this is Child
this is Parent

call() 메소드

  • world() 코드는 this.world() 으로 선언한 것과 같다. 자신의 world 메소드를 호출한다.
  • super 는 부모 클래스 참조와 같다.
  • 자식 클래스의 필드 이름과 메소드가 같지만 super 키워드를 사용하여 부모 클래스의 기능을 사용할 수 있다.

super, this 용도

super, this 는 유사해 보이나 다르다.

  • super: 부모의 클래스 참조를 가리키고 싶을 때 사용
  • this: 본인의 참조 값을 가리키고 싶을 때 사용.