[개인공부] ch7-10~11 참조변수 super, 생성자 super()

Walter Mitty·2022년 11월 19일
0

개인공부

목록 보기
11/40
post-thumbnail

참조변수 super

  • 객체 자신을 가리키는 참조변수이다.
    • this와 거~의 비슷하다고 보면 된다.왜냐하면 this도 인스턴스 메서드 내에서만 쓸 수 있다.
  • 인스턴스 메서드(생성자)내에만 존재
    • 인스턴스 메서드나 생성자 내에서만 사용가능
    • static 메서드 내에 사용불가
  • super는 조상의 멤버를 자신의 멤버와 구별할 때 사용

super() - 조상의 생성자

  • 참조변수 super와 관계없다
  • 조상의 생성자를 호출할 때 사용한다
    • 참고: 상속에서 생성자와 초기화블럭은 상속이 안된다
  • 조상의 멤버는 조상의 생성자를 호출해서 초기화한다
    따라서,
Point3D(int x, int y, int z) {
	super(x,y); // 조상클래스의 생성자 Point(int x, int y)
    this.z = z; // 자신의 멤버를 초기화
}

생성자의 추가 조건

  • ⭐️⭐️⭐️ 생성자의 첫 줄에 반드시 생성자(super() or this())를 호출해야 한다.⭐️⭐️⭐️
    그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입한다.
class Point {
	int x;
    int y;
    
    Point() {
    	this(0,0); //OK
    }
	
    point(int x, int y) { //조상 기본 생성자 호출조건 안맞음
    	this.x = x;
        this.y = y;
    }
}

따라서, ⇩ 아래와 같이 바뀐다

class Point extends Object {
	int x;
    int y;
    
    Point() {
    	this(0,0); //this 호출 OK
    }
    
    Point(int x, int y) {
    	super(); //Object //super 호출 OK
        this.x = x;
        this.y = y;
    }
}

0개의 댓글