●참조변수 super
super는 자손 클래스에서 조상 클래스로부터 상속받을 때, 상속받은 멤버와 자손클래스의 멤버가 같은 경우 구별하기 위해 사용한다. 구별하기위해 사용한다는 점에서 멤버변수와 지역변수를 구별 할 때 사용했던 'this'와 쓰임이 비슷하지만, 참조변수 super는 자손 클래스와 조상 클래스의 멤버를 구별 했다는 점에서 this와 차이가 있다.
class Ex7_2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent { int x = 10; /* super.x */ }
class Child extends Parent {
int x = 20; // this.x
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x=" + super.x);
}
}
결과 : x=20
this.x=20
super.x=10
Child 클래스는 조상 Parent 클래스로부터 x를 상속받았는데 자신의 멤버인 x와 조상의 멤버인 x가 서로 이름이 같아 구별할 수 없다. 이 둘을 구별하기 위해 참조변수 super가 쓰였다.
●조상의 생성자 super()
this()처럼 super()도 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는 반면, super()는 조상의 생성자를 호출하는데 사용한다.
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
this.x = x; // 조상의 멤버를 초기화
this.y = y; // 조상의 멤버를 초기화
this.z = z;
}
}
위의 코드에서는 Point3D클래스의 생성자가 조상인 Point클래스로부터 상속받은 x, y를 초기화한다. 틀린 코드는 아니지만, 아래와 같이 생성자 Point3D()를 조상의 생성자 super()를 사용하면 더 깔끔하고 바람직하다.
Point3D(int x, int y, int z) {
super(x, y); // 조상클래스의 생성자 Point(int x, int y)를 호출
this.z = z; // 자신의 멤버를 초기화
}
출처: 자바의 정석 기초편(저자: 남궁성, 출판사:도우출판)
'java > 객체지향' 카테고리의 다른 글
[객체지향] 다형성(polymorphism) (0) | 2021.07.15 |
---|---|
[객체지향] 제어자 (0) | 2021.07.14 |
[객체지향]오버라이딩(overriding) (0) | 2021.07.13 |
[객체지향] 상속 (0) | 2021.07.13 |
[객체지향] 변수, 멤버변수의 초기화 (0) | 2021.07.12 |