1. 상속
상속 정의
- 기존 클래스의 자산을 자식 클래스에서 재사용하기 위해 사용합니다.
- 부모의 생성자와 초기화 블록은 상속되지 않습니다.
- 부모 클래스 = 조상 클래스 = 슈퍼 클래스 = 상위 클래스
- 자식 클래스 = 자손 클래스 = 서브 클래스 = 하위 클래스
- 상속 관계는 'is a'로 표현할 수 있습니다.(ex - SpiderMan(자식) is a Person(부모))
상속의 장점
- 기존 클래스의 멤버를 물려받기 때문에 코드의 중복을 줄입니다.
- 부모 코드만 바꾸면 자식 코드도 함께 바뀌므로 유지 보수성이 향상됩니다.
상속의 예
//Person.java(부모 클래스)
public class Person {
String name;
void eat(){}
void jump(){}
}
// SpiderMan.java(자식 클래스)
public class SpiderMan extends Person {
boolean isSpider;
void fireWeb(){}
}
- Person의 멤버 : name, eat(), jump()
- SpiderMan의 멤버 : name, eat(), jump(), isSpider, fireWeb()
Object 클래스
- 모든 클래스의 부모 클래스
- 'extends'를 따로 사용하지 않은 클래스는 'extends Object'가 생략되어있는 것입니다.
- 모든 클래스가 Object 클래스를 상속받기 때문에 Object 클래스에 정의된 메서드를 사용할 수 있습니다.
단일 상속(Single Inheritance)
- 자바의 경우 단일 상속만 지원(여러 개를 상속받고 싶을 때는 interface 또는 포함관계를 사용)
- 다중 상속의 경우 관계가 복잡해질 수 있기 때문에 사용하지 않습니다.
포함 관계(has a)
- 여러 개의 클래스에서 특성을 가져오고 싶을 때 사용
- 하나는 상속을 받고, 나머지는 멤버 변수로 받아 사용
- 어떤 클래스를 상속받고, 또는 멤버 변수로 받을지는 프로젝트의 관점에 따라 다릅니다. 'is a', 'has a' 관계를 두고 프로젝트와 가장 잘 어울리는 선택을 해야 합니다.
public class SpiderMan extends Person { // 상속 - is a
Spider spider; // 멤버 변수(포함 관계) - has a
boolean isSpider;
void fireWeb() {
if (isSpider) {
spider.fireWeb();
}else {
System.out.println("Person은 거미줄 발사 불가");
}
}
}
super
- this가 자신의 주소를 가리키듯, super는 부모의 주소를 가리킵니다.
- 'super. 부모 메서드'를 통해 부모의 코드를 재사용할 수 있습니다.
- super()를 이용해서 부모 클래스의 생성자를 호출할 수 있습니다.(단, 자식 클래스 생성자의 맨 첫 줄에서만 호출 가능)
// super를 사용하지 않았을 때 - 코드 중복 O
void jump() {
if (isSpider) {
spider.jump();
} else {
System.out.println("뛰기");
}
}
// super를 사용했을 때 - 코드 중복 X
void jump() {
if (isSpider) {
spider.jump();
} else {
super.jump();
}
}
'Language > Java' 카테고리의 다른 글
[Java] 패키지(Package)와 import (0) | 2022.01.21 |
---|---|
[Java] 메서드 오버라이딩(Overriding) (0) | 2022.01.21 |
[Java] 메서드(Method) (0) | 2022.01.20 |
[Java] 멤버 변수와 지역 변수 (0) | 2022.01.20 |
[Java] 객체지향 프로그래밍 (0) | 2022.01.19 |