super - 부모 참조.
“부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출할 수 없습니다.”
- 이때
super
키워드를 사용하면 부모를 참조할 수 있습니다. -
super
는 이름 그대로 부모 클래스에 대한 참조를 나타냅니다.
다음 예를 봅시다.
- 부모의 필드명과 자식의 필드명 둘 다
value
로 똑같습니다. - 메서드도
hello()
로 자식에서 오버라이딩 되어 있습니다.- 이 때 자식 클래스에서 부모 클래스의
value
와hello()
를 호출하고 싶다면super
키워드를 사용하면 됩니다.
- 이 때 자식 클래스에서 부모 클래스의
Parent
package extends1.super1;
public class Parent {
public String value = "parent";
public void hello() {
System.out.println("Parent.hello");
}
}
Child
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
는 자기 자신의 참조를 뜻합니다.this
는 생략할 수 있습니다. -
super
는 부모 클래스에 대한 참조를 뜻합니다. - 필드 이름과 메서드 이름이 같지만
super
를 사용해서 부모 클래스에 있는 기능을 사용할 수 있습니다.
Super1Main
package extends1.super1;
public class Super1Main {
public static void main(String[] args) {
Child child = new Child();
child.call();
}
}
실행 결과
this value = child
super value = parent
Child.hello
Parent.hello
- 실행 결과를 보면
super
를 사용한 경우 부모 클래스의 기능을 사용한 것을 확인할 수 있습니다.