남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.
1. 상속이란?
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 두 클래스를 부모와 자식의 관계를 맺어주는 것
- 자식은 부모의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
상속을 사용한 2가지 경우를 살펴보자.
a. 상속 사용1
class Child extends Parent {
void play() {
System.out.println("play~~~~");
}
}
class Parent {
int age;
}
- 상속을 구현하는 방법은 extends키워드만 함께 써주기만 하면 된다.
- Child는 Parent를 상속받기 때문에 Parent의 모든 멤버(age)를 상속 받는다.
- play() 메서드는 오직 Child의 멤버로만 사용된다.
b. 상속 사용2
public class GrandChild extends Child {
}
class Child extends Parent {
void play() {
System.out.println("play~~~~");
}
}
class Parent {
int age;
}
- GrandChild는 Child를 상속받기 때문에 Parent의 모든 멤버(age)와 Child의 모든 멤버(play)를 상속 받는다.
- 공통적인 부분을 부모클래스에서 관리하며, 상속관계를 적절히 맺어 주는 것이 핵심
2. 단일상속
- Java는 클래스간의 관계의 복잡도를 줄이고, 메서드 출처의 모호성 등 여러가지 문제를 방지하고자 클래스틀 통한 다중 상속을 허용하지 않는다.
- C++는 다중 상속 허용
- 추후 인터페이스를 다룰 예정인데, 인터페이스의 경우는 다중 상속이 허용된다. (뒤에서 자세히 다루겠다.)
class Circle extends Shape, Point { // 에러
// ...
}
3. 포함관계와 상속관계
- 포함(Composite)
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이들을 조합해서 하나의 커다란 클래스를 만든다.
- ~은 ~을 가지고 있다.(has-a)
- 상속(inheritance)
- ~은 ~이다. (is-a)
class Circle extends Shape {
Point center;
int r;
}
class Point {
int x;
int y;
}
public class Shape {
String color;
void draw() {
System.out.println(color + "로 도형을 그리다.");
}
}
- Circle has a Point(포함 관계) ⇒ 원은 점을 가지고 있다.
- Circle is a Shape(상속 관계) ⇒ 원은 도형이다.
'Programming > Java' 카테고리의 다른 글
[Java] 자바의 제어자 정리 (0) | 2023.10.16 |
---|---|
[Java] package와 import (0) | 2023.10.16 |
[Java] 생성자와 this / super (0) | 2023.10.13 |
[Java] 오버로딩과 오버라이딩 (0) | 2023.10.13 |
[Java] 매개변수를 전달하는 방법(기본타입, 참조타입) (0) | 2023.10.13 |