자바에서 super이 하는 정확한 역할을 모르겠습니다
자바에서 super이 부모클래스참조라고 하는데 정확히 이해가 안 갑니다 코드를 통해 예시를 들어주실 수 있나요?? 책을 읽어봐도 이해가 안됩니다 헷갈리고 어떤 경우에는 사용하고 어떤경우에는 사용안하고 어렵네요
55글자 더 채워주세요.
2개의 답변이 있어요!
super() 메소드는 자식 클래스에서 사용했을 때 부모 클래스의 생성자를 호출할 때 사용됩니다.
즉, 아래 예제에서 super(40)은 부모의 생성자로 정의된 Parent(40)과 같은 기능을 한다고 보시면 됩니다.
class Parent { int a; Parent() { a = 10; } Parent(int n) { a = n; } } class Child extends Parent { int b; Child() { super(40); b = 20; } void display() { System.out.println(a); System.out.println(b); } } public class Test { public static void main(String[] args) { Child ch = new Child(); ch.display(); // 20 40 출력 } }상속 관계에 있을때(extends) Child class 안에서 부모의 정보를 호출할때 사용합니다.
예를 들어 자식과 부모의 name 필드가 동일하게 존재한다고 할때 어떤 필드를 호출할것인지 판단을 하는데요
그때 사용하는 것이 super입니다. (super.name)
우편부가 주소로 우편물을 보냅니다. 집이 두곳이 있는데 번지가 적혀 있지 않고 이름만 있습니다.
제일 가까운 집에 가서 먼저 물어봅니다.
이름이 parent 가 맞나요? 아니면 다음집( super)으로 간다고 생각하시면 됩니다.
만약 주소와 번지가 명확하다면 헤멜 이유없이 바로 찾을 수 있겠죠.
그것이 (this 와 super)라고 생각하시면 됩니다.
this.name => 바로 내 자신의 name 을 찾는다.
super.name => 바로 부모의 name을 찾는다.
name => 먼저 내 자신의 name 을 찾는다. 없다면 부모의 name을 찾는다.
public class Child extends Parent { public static void main(String[] args) { Child child = new Child(); System.out.println(child.getName()); // child System.out.println(child.getParentName()); // parent System.out.println(child.getName()); // child System.out.println(child.name); // child System.out.println(child.childName); // child name } private String name = "child"; public String getName() { return this.name; // 내 이름을 호출(this는 생략가능) } public String getParentName() { return super.name; // 부모클래스의 name(이름)을 호출 } } class Parent { protected String name = "parent"; protected String childName = "child Name"; public String getName() { return name; // 내 이름을 호출(this 없이 - 일반적으로 이렇게 자기자신은 this를 제거하고 코딩합니다.) } }