객체 지향의 상속
- 부모 클래스의 멤버를 자식 클래스가 물려받는 것
- 부모 클래스의 멤버를 재정의할 필요 없음
- 코드 중복을 제거하여 프로그램이 간결
객체 지향에서 상속의 장점
- 멤버 중복 작성 제거 → 클래스의 간결화
- 클래스의 계층적 분류 → 클래스 관리 용이
- 클래스 재사용과 확장 용이 → 새로운 클래스 작성 속도 증가 → 소프트웨어 생산성 향상
자바의 상속 선언
- 부모 클래스: 슈퍼 클래스(super class)
- 자식 클래스: 서브 클래스(sub class)
- extends 키워드 사용(슈퍼 클래스를 확장한다는 개념)
public class Person{
...
}
public class Student extends Person{
//Person(슈퍼 클래스)을 상속받는 Student(서브 클래스) 선언
...
}
public class StudentWorker extends Student{
//Student(슈퍼 클래스)를 상속받는 StudentWorker(서브 클래스) 선언
...
}
- Student 클래스는 Person 클래스의 멤버를 물려받으므로 Person 클래스에 선언된 멤버를 다시 작성할 필요가 없음
- StudentWorker 클래스가 Student 클래스를 상속받으면 Person 클래스의 멤버도 자동 상속
상속과 객체
class Point{
private int x,y;
public void set(int x, int y) {
this.x=x;
this.y=y;
}
public void showPoint() {
System.out.println("("+x+", "+y+")");
}
}
class ColorPoint extends Point{ //Point를 상속받은 ColorPoint
private String color; //ColorPoint 멤버 추가 작성
public void setColor(String color) {
this.color=color;
}
public void showColorPoint() {
System.out.print(color);
showPoint();
//슈퍼 클래스의 메소드이므로 클래스 내에서 중복 선언하지 않고 바로 호출
}
}
public class ColorPointEx {
public static void main(String[] args) {
Point p=new Point();
p.set(1, 2);
p.showPoint();
ColorPoint cp=new ColorPoint();
cp.set(3, 4);
cp.setColor("red");
cp.showColorPoint();
}
}
상속 선언
class ColorPoint extends Point{
...
}
- Point를 상속받는 ColorPoint 클래스의 상속 선언
서브 클래스 객체 생성
Point p = new Point();
ColorPoint cp = new ColorPoint(); //서브 클래스 객체 생성
- p와 cp는 별개의 객체
- p는 Point 클래스의 멤버만 가짐
- cp는 Point와 ColorPoint 클래스의 멤버를 모두 가짐
서브 클래스 객체 활용
- ColorPointEx 클래스의 main() 메소드에서는 cp 객체를 구성하는 ColorPoint 클래스의 public 멤버와 Point 클래스의 pubilc 멤버를 모두 접근 가능
- x, y, color 필드는 private 속성이므로 접근 불가
서브 클래스에서 슈퍼 클래스 멤버 접근
- x, y는 Point의 private 멤버이므로 set()과 showPoint()에게만 접근 허용, ColorPoint의 메소드는 접근 불가
자바 상속의 특징
1. 클래스의 다중 상속을 지원하지 않음
- 클래스 여러 개 상속 불가(class D extends A, B, C 불가능)
- extends 다음에는 클래스 이름을 하나만 지정 가능(class D extends A 가능)
2. 상속 횟수 무제한
3. 상속의 최상위 클래스는 java.lang.Object 클래스
- 자바 계층 구조의 최상위
- 모든 클래스는 자동으로 java.lang.Object를 상속받음
- 자바 컴파일러에 의해 자동으로
예제 5-1 (x, y)의 한 점을 표현하는 Point 클래스와 이를 상속받아 색을 가진 점을 표현하는 ColorPoint 클래스를 작성하고 활용