하얀잔디 2022. 11. 7. 13:22

Object 클래스를 제외한 모든 클래스의 생성자 첫줄에, 우선 별 명시가 없다면

 

컴파일러가 자동으로 super() ; 을 삽입한다.

 

class Point{
    int x,y;
    Point(int x,int y){
        this.x=x;
        this.y=y;
    }
    String getLocation(){
    }
}

라고 가정합시다. 그리고 이를 상속받는

class Point3D extends Point {
    int z;
    Point3D(int x,int y,int z){
        this.x = x;
        this. y = y;
        this.z =z;
    }
    String getLocation(){
    }
}

위와 같은 클래스가 있고, 저 클래스가 상속하는 Point 클래스 가 있다고 가정하면,

 

<<에러가 발생합니다.

 

이유는 Poin3D 생성자 앞단에 super() 를 컴파일러가 자동으로 만듭니다.

그러면 , Point() 생성자는 존재하지 않기에 ( 매개변수가 없는 생성자) 에러가 발생합니다.

 

따라서, Point() 를 만들거나, Point3D 생성자 안에 Point(int x, int y ) 를 호출하도록 변경해야함.