1. 오버라이딩(=메서드 오버라이딩)
- 부모클래스로부터 상속받은 메서드의 내용을 변경하는 것
ex)
class Point {
int x;
int y;
String getLocation() {
return "x : " + x + "y : " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() {
return "x : " + x + "y : " + y + "z : " + z;
}
}
2. 오버라이딩 조건
- 선언부가 부모클래스의 메서드와 일치해야 함(이름, 매개변수, 반환타입)
- 접근 제어자는 부모클래스의 메서드보다 좁은 범위로 변경할 수 없음
- ex ) 부모의 접근 제어자가 protected일 경우, 오버라이딩하는 자식클래스의 메서드는 접근 제어자가 protected나 public이어야 함
- 접근 제어자의 접근범위 : public > protected > (default) > private
- 부모클래스의 메서드보다 많은 수의 예외를 선언할 수 없음(같거나 적어야 함)
ex)
class Parent {
void parentMethod () throws IOException, SQLException {
...
}
}
class Child extends Parent {
void parentMethod () throws IOException {
...
}
}
3. 오버로딩 vs 오버라이딩
- 오버로딩 : 기존에 없는 새로운 메서드를 정의(이름이 같을 뿐 새로운 메서드 정의)
- 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것(기존의 것을 변경)
ex)
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {}
void parentMethod(int i) {}
void childMethod() {}
void childMethod(int i) {}
void childMethod() {}
}
4. super
- 자식클래스에서 부모클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수
- 부모의 멤버와 자신의 멤버를 구별하는데 사용됨
- this와 마찬가지로 static메서드에서는 사용 불가하고, 인스턴스메서드에서만 사용 가능
ex)
class SuperTest2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parend {
int x = 20;
void method() {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
5. super()
- 부모클래스의 생성자를 호출하는데 사용
- Object클래스를 제외한 모든 클래스의 생성자 첫 줄에 생성자,this() 또는 super()를 호출해야 함