*참조변수 super와 생성자 super()를 연관지으면 안된다.
this와 유사함, (this : lv와 iv 구별에 사용)
객체 자신을 가리키는 참조변수
class Ex7-2 {
public static void main(String args[]) {
Child c=new Child();
c.method();
}
}
class Parent {int x=10;} //부모 클래스에 x 1개
class Child extends Parent {
int x=20; // 자식 클래스에 x 1개, 이 x에 this. 붙여줌 => this.x
void method() {
System.out.println("x="+x);
System.out.println("this.x="+this.x);
System.out.println("super.x="+super.x);
}
}
조상의 생성자
조상의 생성자를 호출할 때 사용함
조상의 멤버는 조상의 생성자를 호출하여 초기화
생성자의 첫 줄에 반드시 생성자를 호출해야 한다
-> 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입
class Point {
int x;
int y;
Point() {
this(0,0); //자기 자신의 생성자 호출
}
Point(int x, int y) {
super(); //생성자 첫 줄에 없으면 super(); 생성 (=조상의 기본 생성자를 호출하는 것)
this.x=x;
this.y=y;
}
}
class Point {
int x;
int 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) {
//1)번 방법 : 조상 Point()를 호출
super();
this.x=x;
this.y=y;
this.z=z;
}
Point3D(int x, int y, int z) {
//2)번 방법 :
//조상의 생성자 Point(int x, int y)를 호출
super(x,y);
this.z=z;
}