상속
기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것.
코드의 재사용성을 높이고 코드의 중복제거 => 유지보수 편리
클래스의 이름뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends' 를 써준다.
class Parent { }
class Child extends Parent {
// . . .
}
조상 클래스와 자손 클래스
class Parent와 class Child는 서로 상속 관계에 있다고 하며
상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라 한다
● 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 떄문에, Child클래스는 Parent클래스의 멤버들을 포함한다.
● 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
상속 예제)
class Tv {
boolean power; //전원상태 (on/off)
int channel; //채널
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class SmartTv extends Tv { //SmartTv는 Tv에 캡션(자막)기능을 추가
boolean caption; //캡션상태(on/off)
void displayCaption(String text) {
if (caption) { //캡션 상태가 true 일떄만 text 보여줌
system.out.println(text);
}
}
}
--------------------------------------------------------------------------
SmartTv에는 Tv의 기능을 모두 가지고 있어야 하기 때문에
Tv클래스로부터 상속받고 기능을 추가하여 SmartTv클래스를 작성하였다.
포함관계
상속 이외에도 클래스를 재사용하는 또 다른 방법이다.
한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.
class Circle {
int x; //원점의 x좌표
int y; //원점의 y좌표
int z; //반지름
}
class Point {
int x; //x좌표
int y; //y좌표
=> 클래스 Circle와 Point는 x,y가 중복된다.
-----------------------------------------
Point클래스를 재사용해서 Circle클래스를 작성한다면 아래와 같다.
class Circle {
Point c = new Point(); // 원점 (포함관계로 재사용함)
int r;
}
클래스 간의 관계 설정하기
클래스를 가지고 문장을 만들었을 때 아래와 같은 문장중에 성립하는 쪽으로 정해준다.
상속관계 => ~은 ~이다. (is-a)
포함관계 => ~은 ~을 가지고 있다. (has-a)
ex) 1. 원(Circle)은 점(Point)이다. - Circle is a Point
2. 원(Circle)은 점(Point)을 가지고 있다.. - Circle has a Point
두 문장을 비교해 보면 2.번 문장이 더 옳다는 것을 알 수 있다.
따라서 Circle클래스와 Point클래스 간의 관계는 상속관계 보다 포함관계로 맺어준다.
'Java' 카테고리의 다른 글
자바의 정석 ( 단일 상속 / Object 클래스 ) (0) | 2023.03.18 |
---|---|
자바의 정석 ( 오버로딩과 오버라이딩 헷갈리지 말자! ) (0) | 2023.03.17 |
자바의 정석 ( 생성자 this() / 참조변수 this / 변수의 초기화 ) (0) | 2023.03.15 |
자바의 정석 ( 생성자 / 생성자 규칙 / 기본 생성자 ) (0) | 2023.03.15 |
자바의 정석 ( 메서드 / 메서드의 장점 / 인스턴스 메서드 / static 메서드 ) (2) | 2023.03.14 |