<표현식> [접근제한자] class 클래스명 extends 클래스명{} --------------------------------------------------- public class Academy extends Company{} => Academy (자손), Company (부모)
class Tv {...} class SmartTv extends Tv{...} 컴파일 진행시 class Tv -> class Tv extends Object{...}로 됨
class Point{ int x, y; Point(int x, int y){ this.x = x; this.y = y; } String getLocation(){ return "x : " + x + ", y : " + y; } class Point3D extends Point{ int z; Point3D(int x, int y, int z){ this.x = x; this.y = y; this.z = z; } String getLocation(){ return "x : " + x + ", y : " + y + ", z : " + z;
자식클래스의 객체를 생성하게 되면 에러가 발생할 것이다.
그 이유는
Point3D(int x, int y, int z){ super(); // 컴파일러가 생성자의 첫줄에 생성자호출을 하는 문장을 넣어준다 this.x = x; // 그리고 이렇게 부모의 멤버는 자식이 수정하는 것보다는 this.y = y; // super(x, y)로 부모의 매개변수 생성자를 호출하는게 좋다 this.z = z; } ==> super(x, y) this.z = z;
그렇게 되면 super()는 조상클래스인 Point의 기본생성자 Point(){ }를 호출하는 코드인데 Point에는 기본생성자가 존재하지 않기 때문에 에러가 발생한 것이다
super() | super. |
---|---|
자식 내 부모객체 생성 및 부모객체의 초기화 | 부모객체를 가리키는 참조변수 |
부모객체 생성자를 호출하는 메소드 | 부모객체의 필드나 메소드 호출에 사용 |
매개변수 생성자의 호출은 super( 매개변수, 매개변수 ) | 부모의 멤버변수와 자식의 멤버변수의 이름이 같다면 this.은 자식의 변수를 super.은 부모의 변수를 가리킴 |