상속
class Child extends Parent{
//상속 방법은 extends 뒤에 상속할 클래스명을 적으면 됨
}
- 조상클래스: 부모(parent)클래스 = 상위(super)클래스 = 기반(base)클래스
- 자손 클래스: 자식(child)클래스 = 하위(sub)클래스 = 파생된(derived)클래스
class Parent{
int age;
}
class Child extends Parent{
}
자손 클래스는 조상의 멤버를 모두 상속받기 때문에, Child클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.
class Parent{
int age;
}
class Child extends Parent{
void play()
{
System.out.println("놀자~");
}
}
Child 클래스의 새로운 코드가 추가되어도 조상인 Parent클래스는 아무런 영향도 받지 않는다.
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
class Parent{
int age;
}
class Child extends Parent{
}
class Child2 extends Parent{
}
Child, Child2 모두 Parent 클래스와 서로 상속관계에 있지만 서로 아무런 관계도 성립하지 않는다.
만일 자손클래스에 자손클래스를 또 상속하면 조상 클래스의 멤버도 함께 생성되기 때문에 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용할 수 있다.
자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다.
클래스 간의 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.
class Cicle{
int x; // 원점의 x 좌표
int y; // 원점의 y 좌표
int r; // 반지름(radius)
}
class Point {
int x ; // x 좌표
int y ; // y 좌표
}
Pint클래스를 재사용해서 Circle클래스를 작성
class Cicle{
Point c = new Point(); //원점
int r; // 반지름(radius)
}
Point 클래스를 포함시키는 대신 상속관계를 맺어 주기
class Circle extends Point{
int r;
}
Circle 클래스를 작성하는데 있어서 Point 클래스를 포함시키거나 상속받도록 하는 것은 결과적으로 차이가 없어보인다.
그럴 때는 '~은 ~이다', '~은 ~을 가지고 있다'를 넣어서 문장을 만들어보면 클래스 간의 관계가 명확해진다.
원은 점이다. - 포함관계로 작성이 유리
원은 점을 가지고 있다. - 상속관계로 작성이 유리
자바에서는 단일상속만을 허용한다.
단일 상속으로 클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다.
Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다. 다른 클래스로 부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 한다.