[Java/객체지향] 클래스의 관계 - 상속/포함관계/단일상속/Object클래스
2024. 8. 21. 20:22ㆍCS/프로그래밍 언어
클래스의 관계
(1)상속
- 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것
- 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
- 자손의 변경은 조상에 영향을 미치치 않는다.
2차원 좌표의 한 점(x,y)
class Point{
int x;
int y;
}
3차원 좌표의 한 점(x, y, z)
//(1)Point와 관계없는
class Point3D{
int x;
int y;
int z;
}
//(2)Point와 상속관계
class Point3D extends Point{
int z;
}
(2)포함 관계
- 포함이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은 단위의 클래스를 만들고, 이 둘을 조합해서 클래스를 만든다.
//(1)
class Circle{
int x;
int y;
int r;
}
//(2)
class Point{
int x;
int y;
}
class Circle{
Point c = new Point();
int r;
}
클래스 간의 관계 결정하기
상속관계 ~은 ~이다. (is-a)
- 원(circle)은 점(point)이다.(부자연)
- Sportcar는 Car이다.
- 상속은 여러 제약 존재 → 꼭 필요할 때만
class Circle extends Point{
int r;
}
포함관계 ~은 ~을 가지고 있다. (has-a)
- 원(circle)은 점(point)을 가지고 있다.(자연스럽-더 적절)
- Deck은 Car를 가지고 있다.
- 90%이상 대부분이 포함
class Circle{
Point c = new Point();
int r;
}
단일 상속
- Java는 단일상속만 허용(C++은 다중상속 허용)
- 단일상속: 하나의 부모로부터 상속받을 수 있게 하는 것
- 다중상속을 할 수 있는 방법: 비중이 높은 클래스만 상속관계로, 나머지는 포함관계로 함
.class TV{
boolean power;
int channel;
void power() {power = !power;}
void channelUp(){++channel;}
void channelDown(){--channel;}
}
class DVD{
boolean power;
void power() {power = !power;}
void play(){/*내용생략*/}
void stop(){/*내용생략*/}
void rew(){/*내용생략*/}
void ff(){/*내용생략*/}
}
public class TvDVD extends TV{
DVD dvd = new DVD();
void play(){
dvd.play();
}
void stop(){
dvd.stop();
}
void rew(){
dvd.rew();
}
void ff(){
dvd.ff();
}
}
Object클래스 - 모든 클래스의 조상
- 부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 됨
- Object클래스: 모든 클래스의 상속계층도의 최상위에 있는 조상 클래스
- 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받음
- → ex) toString(), equals(Object obj), hashCode()…
'CS > 프로그래밍 언어' 카테고리의 다른 글
[Java/객체지향] 생성자, 생성자의 조건, 참조변수 this (0) | 2024.08.20 |
---|---|
[Java/객체지향] 오버로딩과 오버라이딩 (0) | 2024.08.19 |
[Java/객체지향] static 메서드와 인스턴스메서드 (0) | 2024.08.18 |
[Java/객체지향] 매개변수 (0) | 2024.08.18 |
[Java/객체지향] 메서드 (0) | 2024.08.17 |