자바의 정석 - 참조변수 super , 생성자 super()

Yohan·2024년 1월 18일
0

참조변수 super

  • 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재, 즉 static 메서드에는 사용불가
  • 조상의 멤버를 자신의 멤버와 구별할 때 사용
class Ex {
	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) // 20
        System.out.println(this.x) // 20
        System.out.println(super.x) // 10
    }
}
  • super.x 와 this.x가 같을 수도 있음
class Ex {
	public static void main(String args[]) {
    	Child2 c = new Child2();
        c.method();
    }
}

class Parent2 { int x = 10 ; /* super.x와 this.x 둘 다 가능 */ }
class Child2 extends Parent2 {
    void method() {
    	System.out.println(x) // 10
        System.out.println(this.x) // 10
        System.out.println(super.x) // 10
    }
}

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) {
    	super(x, y); // 조상클래스의 생성자 Point(int x, int y)를 호출해서 조상이 초기화 하도록함
        this.z = z; // 자신의 멤버를 초기화
    }
}
  • 모든 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.
  • 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super()를 삽입
class Point() {
	int x, y;
    
    Point() {
    	this(0,0); // 생성자 O
    }
    
    Point(int x, int y) {
    	this.x = x; // 생성자 X , 실행하면 super() 자동 삽입
        this.y = y;
    }
}
profile
백엔드 개발자

0개의 댓글