참조변수 super
- 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재 // static 메서드내에서는 사용 불가
- 조상의 멤버를 자신의 멤버와 구별할 때 사용
복습) this: lv와 iv구별에 사용
class Ex7_2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent { int x=10; }
class Child extends Parent {
int x=20;
void method() {
System.out.println("x=" + x); // x=20
System.out.println("this.x=" + this.x); // this.x=20
System.out.println("super.x="+ super.x); // super.x=10
}
}
조상의 생성자 super()
// 참조변수 super와 관련X(this랑 같은 느낌)
cf) 상속에서 배운 것: 생성자, 초기화 블럭은 상속되지 않음
- 조상의 생성자를 호출할 때 사용, 상속이 안되기 때문에 호출해서 사용해야함
- 조상의 멤버는 조상의 생성자를 호출해서 초기화, 조상의 멤버를 자손이 초기화 할수 있지만 조상의 멤버는 조상이 초기화 하는게 바람직
public class Ex7_4 {
public static void main(String[] args) {
Point3D p = new Point3D(1, 2, 3);
System.out.println("x=" + p.x + ",y=" + p.y + ",z=" + p.z);
}
}
class Point {
int x, y;
Point(int x, int y) {
// 컴파일하면 super()==object(); 자동호출됨 <- 생성자 첫 줄에 반드시 생성자 호출한다는 조건
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)를 호출, 만약 super(); 이렇게 호출하면 에러발생!! 왜냐면 Point 클래스에 기본생성자를 만들지 않았기 때
this.z = z;
}
}
생성자의 조건
// 추가조건
- 생성자의 첫 줄에 반드시 생성자를 호출해야 한다. // this() 또는 super()
그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입 // 따로 조상클래스를 지정하지 않았으면 object();를 호출하는것과 같음
public class Ex7_4 {
public static void main(String[] args) {
Point3D p = new Point3D(1, 2, 3);
System.out.println("x=" + p.x + ",y=" + p.y + ",z=" + p.z);
}
}
class Point {
int x, y;
Point(int x, int y) {
// 컴파일하면 super()==object(); 자동호출됨 <- 생성자 첫 줄에 반드시 생성자 호출한다는 조건
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)를 호출, 만약 super(); 이렇게 호출하면 에러발생!! 왜냐면 Point 클래스에 기본생성자를 만들지 않았기 때문
this.z = z;
}
}
'Java' 카테고리의 다른 글
Java import문 (0) | 2022.12.26 |
---|---|
Java 패키지(package) (0) | 2022.12.26 |
Java 오버라이딩(Overriding) 과 오버로딩(Overloading) (0) | 2022.12.26 |
Java 모든 클래스의 조상 Object 클래스 (0) | 2022.12.24 |
Java 클래스간의 관계 - 상속(Inheritance), 포함(Composite) 관계 (0) | 2022.10.10 |