728x90
반응형
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에 접근할 수 있다
}
// 위와 같은 이유로 자바에서는 다중 상속이 불가능하다 (상속의 모호성)
//예제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();
}
}
super()
- 자신이 상속받은 부모의 생성자를 호출하는 메소드
- 부모클래스에 기본 생성자가 아닌 매개변수를 가지는 생성자가 있다면(=부모클래스에서 생성자가 오버로딩되면) 자동으로 추가되지 않음 (=묵시적 제공을 하지 않음) 이럴 때 사용
예문
class Parent{
int a;
Parent(int n){a=n;};
}
class Child extends Parent(){
int b;
Child(){
super()
b=20;
}
}
1. 부모클래스에 기본 생성자 선언 (명시된 문제 그대로의 해결)
class Parent{
int a;
Parent(){a=10;};
Parent(int n){a=n;};
}
class Child extends Parent(){
int b;
Child(){
super();
b=20;
}
}
2. 오버로딩된 생성자에 맞춰 super()의 인자를 맞춰줌 (합리적 해결👍🏻)
class Parent{
int a;
Parent(int n){a=n;};
}
class Child extends Parent(){
int b;
Child(){
super(40);
b=20;
}
}
반응형
'언어 > Script Question' 카테고리의 다른 글
map & flat & flatMap (0) | 2024.04.07 |
---|---|
캡쳐링 & 버블링 (0) | 2024.04.07 |
[…], {…} (0) | 2024.04.07 |
$와 _는 무엇인가 (0) | 2024.04.07 |
동기/비동기 & 블로킹/논블록킹 (0) | 2024.04.07 |