Search

super & super()

대분류
언어
소분류
JavaScript
설명
자신이 상속받은 부모를 가리키는 참조 변수
유형
최종 편집 일시
2024/10/30 02:21
생성 일시
2024/01/24 08:12
14 more properties

super

자신이 상속받은 부모를 가리키는 참조 변수
자식과 부모사이의 구분에 사용
class Object{ int a; } class A extends Object{ int a; } public static void main(String args[]){ A ins = new A(); ins.a=2 // 여기서 a는 A의 a. 즉, 자식의 변수이다 // 만약 자식에게 a라는 변수가 없었다면 부모의 a를 가리켰을 것이다. // 여기서 자식 a가 아닌 부모의 a로 접근하고 싶다면? ins.super.a = 20; // 이렇게 super라는 참조 변수를 사용해서 부모의 a에 접근할 수 있다 } // 위와 같은 이유로 자바에서는 다중 상속이 불가능하다 (상속의 모호성)
Java
복사
//예제2 class Parent { int a = 10; } class Child extends Parent { int a = 20; void display() { System.out.println(a); System.out.println(this.a); // 자식 System.out.println(super.a); // 부모 } } public class Inheritance03 { public static void main(String[] args) { Child ch = new Child(); ch.display(); } }
Java
복사

super()

자신이 상속받은 부모의 생성자를 호출하는 메소드
부모클래스에 기본 생성자가 아닌 매개변수를 가지는 생성자가 있다면(=부모클래스에서 생성자가 오버로딩되면) 자동으로 추가되지 않음 (=묵시적 제공을 하지 않음) 이럴 때 사용
예문
class Parent{ int a; Parent(int n){a=n;}; } class Child extends Parent(){ int b; Child(){ super() b=20; } }
Java
복사
1. 부모클래스에 기본 생성자 선언 (명시된 문제 그대로의 해결)
class Parent{ int a; Parent(){a=10;}; Parent(int n){a=n;}; } class Child extends Parent(){ int b; Child(){ super(); b=20; } }
Java
복사
2. 오버로딩된 생성자에 맞춰 super()의 인자를 맞춰줌 (합리적 해결)
class Parent{ int a; Parent(int n){a=n;}; } class Child extends Parent(){ int b; Child(){ super(40); b=20; } }
Java
복사