[CH7. 객체지향프로그래밍2] 상속

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{}

이것은 따지고 보면

1
class Tv extends Object{}

이것임.
toString(), equals() 그냥 쓸 수 있는게 Object클래스에 정의 되어있어서 그렇다.

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×