충분히 쌓여가는
상속이냐 포함이냐 (클래스간의 관계 설정) 본문
클래스로 작성하는데 있어 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것이 어려울 수 있다
상속관계: A는 B이다
포함관계: A는 B를 가지고 있다
이전 글에서 사용한 Circle의 예를 들어보면 Circle(원)이라는 클래스가 Point(점)을 가지고 있다가 더 자연스럽기 때문에 포함관계라고 할 수 있다(대부분의 경우에 포함관계)
상속
class MyPoint {
int x;
int y;
}
class Circle extends MyPoint { // 상속
int r;
}
public class InheritanceTest {
public static void main(String[] args) {
Circle c = new Circle();
c.x = 1;
c.y = 2;
c.r = 3;
System.out.println(c.x);
System.out.println(c.y);
System.out.println(c.r);
}
}
1
2
3
포함
class MyPoint {
int x;
int y;
}
class Circle { // 포함
MyPoint p = new MyPoint(); // 참조변수의 초기화
int r;
}
public class InheritanceTest {
public static void main(String[] args) {
Circle c = new Circle();
c.p.x = 1;
c.p.y = 2;
c.r = 3;
System.out.println(c.p.x);
System.out.println(c.p.y);
System.out.println(c.r);
}
}
1
2
3
변외
생성자의 초기화
Mypoint p; 까지만 해주면 저장공간이 안생겨서 초기화를 해준 것이 아니다
class MyPoint {
int x;
int y;
}
class Circle {
MyPoint p;
int r;
}
저장공간을 따로 만들어 생성자를 초기화 해주어야 한다
class MyPoint {
int x;
int y;
}
class Circle {
MyPoint p;
int r;
Circle() {
p = new Mypoint(); // 생성자 초기화
}
}
'Java > 객체지향' 카테고리의 다른 글
Object 클래스(모든 클래스의 조상), toString() 사용할 수 있는 이유 (0) | 2023.06.05 |
---|---|
단일 상속(Single Inheritance) (0) | 2023.06.05 |
포함(Composite) 관계 (0) | 2023.06.04 |
상속(Inheritance) (0) | 2023.06.04 |
변수의 초기화 (0) | 2023.06.01 |