부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출할 수 없다.
이때 super
키워드를 사용하면 부모를 참조할 수 있다. super
는 부모 클래스에 대한 참조를 나타낸다.
다음 예를 보자. 부모의 필드명과 자식의 필드명이 둘다 value
이다. 메서드도 hello()
로 자식에서 오버라이딩 되어 있다.
이때 자식 클래스에서 부모 클래스의 value
와 hello()
를 호출하고 싶다면 super
키워드를 사용하면 된다.
package extends1.super1;
public class Parent {
public String value = "parent";
public void hello() {
System.out.println("Parent.hello");
}
}
package extends1.super1;
public class Child extends Parent {
public String value = "child";
@Override
public void hello() {
System.out.println("Child.hello");
}
public void call() {
System.out.println("this value = " + this.value); // this 생략 가능
System.out.println("super value = " + super.value);
this.hello(); // this 생략 가능
super.hello();
}
}
call()
메서드를 보자.
this
는 자기 자신의 참조를 뜻한다. 생략 가능하다.super
는 부모 클래스에 대한 참조를 뜻한다.super
를 사용해서 부모 클래스에 있는 기능을 사용할 수 있다.package extends1.super1;
public class Super1Main {
public static void main(String[] args) {
Child child = new Child();
child.call();
}
}
실행 결과를 보면 super
를 사용한 경우 부모 클래스의 기능을 사용한 것을 확인할 수 있다.
super
메모리 구조