1. 상속
1.1 상속의 정의와 장점
기존의 클래스를 재사용하여 새로운 클래스를 작성하는것
1 2
| class Parent{} class Child extends Parent{}
|
- 조상클래스 - 부모클래스, 상위클래스, 기반 클래스
- 자손클래스 - 자식 클래스, 하위클래스, 파생된 클래스
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
- 자손 클래스의 멤버개수는 조상 클래스보다 항상 같거나 많다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Tv{ boolean power; int channel; void power(){power = !power;} void channelUp(){++chnannel;} void channelDown(){--channel;} }
class CaptionTv extends Tv{ boolean caption; void displayCaption(String text){ if(caption){ system.out.println(text); } } }
|
1.2 클래스간의 관계 - 포함관계
1 2 3 4 5
| class Circle{ int x; int y; int r; }
|
이 클래스를
1 2 3 4 5 6 7 8 9
| class Point{ int x; int y; }
class Circle{ Point point = new Point(); int r; }
|
이렇게 표현할 수 있다.
Engine, Door 클래스를 미리 작성 후 아래와 같이 사용 가능.
1 2 3 4
| class car{ Engine e = new Engine(); Door[] d = new Door[4]; }
|
1.3 클래스간 관계 결정하기
어떨때 상속, 어떨때 포함관계를 맺을까?
- 상속: ~은 ~이다(is-a)
- 포함 : ~은 ~을 가지고 있다(has-a)
ex) 원은 점(point)이다 (X)
원은 점을 가지고 있다(O) -> 포함관계
SportCar는 Car이다(0) -> 상속 관계
1.4 단일 상속
부모클래스를 두개 이상 상속 받을 수 없다.
1 2 3 4
| calss TVCR extends TV, VCR{
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Tv{ boolean power; int channel; void power(){power = !power;} void channelUp(){++chnannel;} void channelDown(){--channel;} }
class VCR{ boolean power; int counter =0; void power(){}; void play(){}; void stop(){}; void rew(){}; void ff(){}; }
class TVCR extends Tv{ VCR vcr = new VCR(); int counter =vcr.counter; void play(){ vcr.play(); }; void stop(){ vcr.stop(); }; void rew(){ vcr.rew(); }; void ff(){ vcr.ff(); };
|
1.5 Object클래스 -모든 클래스의 조상
Object는 모든 클래스의 조상이다.
이것은 따지고 보면
1
| class Tv extends Object{}
|
이것임.
toString(), equals() 그냥 쓸 수 있는게 Object클래스에 정의 되어있어서 그렇다.