'상속(inheritance)'은 ①재사용성과 ②검증시간의 단축, ③유지보수의 효율성 등의 장점을 내포한 기능입니다.
class Pos2D { // 슈퍼클래스 (부모클래스, 상위클래스)
private int x, y;
public Pos2D(int x, int y) {
this.x = x;
this.y = y;
}
public void show() {
System.out.println("x : " + x + "y : " + y);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
class Pos3D extends Pos2D{ // Pos2D의 내용을 상속받아서, 추가속성과 기능을 작성한 새로운 클래스
// 서브 클래스 (자식클래스, 하위클래스)
private int z;
public Pos3D(int x, int y, int z) { // 서브클래스는 슈퍼클래스의 생성자를 반드시 호출해야만 한다.
// this.x = x;
// this.y = y;
super(x, y); // Pos2D(int x, int y) // 생성자의 첫번째 줄에서 호출
this.z = z;
}
@Override // 물려받은 기능(함수)의 형식은 유지하면서, 내용을 새로 작성한다
// -> 주석 및 문법 체크 역할(어노테이션)
public void show() {
System.out.printf("x : %d, y : %d, z : %d\n", getX(), getY(), z);
}
public int getZ() {
return z;
}
}
그렇다면 상속이 이루어지면 어떤 결과값이 나오게 될까요?
위의 코드에서 보자면 'Pos3D' 에서 선언되지 않더라도 'Pos3D'객체인 ob2에서 'Pos2D' 에서 선언된 int x, int y의 '필드 변수'를 사용할 수 있는 것을 확인하실 수 있을 겁니다.<※ 결과는 다음과 같습니다.>
오버라이딩은 위에서 언급하였듯이 상속받은 메서드의 내용을 재정의하여 사용하는 방식을 의미합니다.이때 앞선 코드에서 보시다시피 해당 메서드 위에 @Override라는 구문을 보실수 있으실 겁니다.