1. super
부모 클래스의 변수와 자식 클래스의 변수의 이름이 동일할 때 super 참조 변수를 사용하여 멤버를 구분할 수 있습니다
super를 사용하면 부모 클래스의 변수가 호출되며 this로 자식 클래스의 변수를 호출할 수 있습니다
부모클래스에만 선언된 b 변수는 this를 사용하더라도 부모 클래스의 변수를 호출합니다
//부모클래스
class Parent {
int a = 10;
int b = 20;
}
//자식클래스
class Child extends Parent {
int a = 30;
void print() {
System.out.println(super.a); //super a 호출
System.out.println(this.a); //this로 a 호출
System.out.println(this.b); //this로 b 호출
}
}
//출력결과
10
30
20
2. super()
super 참조변수는 이름이 동일한 부모 클래스의 변수를 호출했다면 super() 메소드는 부모 클래스의 생성자를 호출합니다
모든 자식 클래스의 생성자 첫 줄에 super()가 존재하기 때문에 자식 클래스의 생성자를 호출하면 자동으로 부모 생성자가 호출됩니다
부모 클래스의 생성자를 호출하면서 모든 클래스의 부모 클래스 격이 Object까지 거슬러 올라갑니다
//부모클래스
class Parent {
int a = 10;
}
//자식클래스
class Child extends Parent {
int b;
Child() {
//super() 자동호출
b = 20;
}
}
그러나 부모 클래스에 기본 생성자가 아닌 매개변수를 가지는 생성자가 있다면 디폴트 생성자는 호출되지 않습니다
이런 경우에 오버라이딩을 하며 super() 메소드를 사용하면 부모의 생성자를 호출할 수 있습니다
//부모클래스
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);
}
}
//출력결과
40
20
'JAVA' 카테고리의 다른 글
[JAVA] 상속 Inheritance (1) | 2024.03.28 |
---|---|
[JAVA] substring으로 문자열 자르기 (0) | 2024.03.24 |
[JAVA] 이것이 자바다 02-15장 핵심 요약 (16) | 2023.07.26 |