개발의 시작과 끝
2020.02.23 / Day - 10 상속, 메서드 오버라이딩 본문
a9A - 7~8일차
상속(Inheritance)
부모 클래스의 속성들을 자식 클래스가 복사 해오는 것.
상속의 규칙
예를 들어 흰오리가 오리의 클래스를 물려받으면 흰오리도 오리의 일종이기 때문에 물려받을 수 있지만
오리를 없애고 흰오리에 날다를 넣고 그것을 청둥오리한테 물려받게 했을 때 자바에서는 가능 하지만
청둥오리는 흰오리가 아니기 때문에 상식적으로 상속이 불가능 하다.
이를 어긴다면 나중에 자바에서 꼬일 수가 있다.
class 오리 {
void 날다() {
System.out.println("오리가 날개로 날아갑니다.");
}
}
class 흰오리 extends 오리 {
}
class 청둥오리 extends 오리 {
}
청둥오리 a청둥오리 = new 청둥오리();
a청둥오리.날다();
// 출력 : 오리가 날개로 날아갑니다.
흰오리 a흰오리 = new 흰오리();
a흰오리.날다();
// 출력 : 오리가 날개로 날아갑니다.
메서드 오버라이딩
이미 있는 메서드를 다시 만드는 것 또는 재정의 하는 것
class 오리 {
void 날다() {
System.out.println("오리가 날개로 날아갑니다.");
}
}
// 오리 => 부모 클래스
// 흰오리 => 자식 클래스
// 흰오리 extends 오리 => 흰오리가 오리의 능력을 물려 받는다.
// "`흰오리`는 `오리`이다." 라고 자바에게 알려준다.
// `A 는 B 이다.` 테스트에 통과하는 것만 상속이 가능하다.
// 클래스와 객체는 명사이다.
// 메서드는 동사이다.
class 흰오리 extends 오리 {
}
class 청둥오리 extends 오리 {
}
class 고무오리 extends 오리 {
// 메서드 재정의 라고 합니다.
// 메서드 오버라이드 라고도 합니다.
// 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
void 날다() {
System.out.println("저는 날 수 없어요. ㅜㅠ");
}
}
청둥오리 a청둥오리 = new 청둥오리();
a청둥오리.날다();
// 출력 : 오리가 날개로 날아갑니다.
흰오리 a흰오리 = new 흰오리();
a흰오리.날다();
// 출력 : 오리가 날개로 날아갑니다.
고무오리 a고무오리 = new 고무오리();
a고무오리.날다();
// 출력 : 저는 날 수 없어요. ㅜㅠ
상속의 한계
자바에서 다중상속은 불가능 하며, 상속에는 한계가 있다.
상황이 안되면 더 이상 상속으로 커버가 불가능 한 것이 있다.
ex ) 흰오리 extends 오리 => O / 흰오리 extends 오리 extends 고무오리 => X\
상속보다는 구성
상속 : is a 관계 => a is b / a는 b이다.
구성 : has a관계 => a has b / a는 b를 가지고 있다. ex) 사람은 팔, 다리, 몸통, 머리로 구성되어 있다.
'자바 공부' 카테고리의 다른 글
2020.02.26 / Day - 13 영역 (0) | 2020.02.26 |
---|---|
2020.02.23 / Day - 10 상속을 통한 캐스팅 허용 (0) | 2020.02.23 |
2020.02.22 / Day - 9 static 메서드, 매개변수, 리턴 (0) | 2020.02.22 |
2020.02.19 / Day - 6 레퍼런스 변수 (0) | 2020.02.19 |
2020.02.18 / Day - 5 클래스 (0) | 2020.02.18 |