상속 안쓴경우 (중복 有)
class 검은고양이 {
void 숨쉬다() { }
void 야옹() { }
void 뛰어넘다() { }
void 미래를_예지하다() { }
}
class 흰고양이 {
void 숨쉬다() { }
void 야옹() { }
void 뛰어넘다() { }
void 목숨을_늘린다() { }
}
흰고양이 a = new 흰고양이();
a.숨쉬다();
a.야옹();
a.미래를_예지하다();
검은고양이 b = new 검은고양이();
b.숨쉬다();
b.야옹();
b.목숨을_늘린다();
이 때 고양이를 8마리로 할거고, 8마리에게 숨쉬다, 야옹, 뛰어넘다 이 3개가 다 들어있다면?
같은 기능을 다 복붙하는거 비효율적임.
검은고양이와 흰고양이를 포함하는 더 추상적인 개체를 만들 수 있다.=>고양이
상속 사용한 경우(중복코드 없거나, 적음)
class 고양이 {
void 숨쉬다() { }
void 야옹() { }
void 뛰어넘다() { }
}
class 검은고양이 extends 고양이 { //위 설계도의 내용을 복사 받음(extends)
void 미래를_예지하다() { }
}
class 흰고양이 extends 고양이 { //흰 고양이 안에 메소드 4개인거임.3개 상속받았으니!
void 목숨을_늘린다() { }
}
class 점박이고양이 extends 고양이 {
void 춤춘다() { }
}
흰고양이 a = new 흰고양이();
a.숨쉬다();
a.야옹();
a.미래를_예지하다();
검은고양이 b = new 검은고양이();
b.숨쉬다();
b.야옹();
b.목숨을_늘린다();
점박이고양이 c = new 점박이고양이();
c.숨쉬다();
c.야옹();
로봇오리 extends 오리 ,고무오리
이렇게 두개 상속 받는 것 불가능
이유: 오리한테도 void 날다()있고 고무오리한테도 void 날다() 있으면 나중에 로봇오리.날다();하면 뭐 부름?! 애매해질 수 있다.
그럼 두 속성 가질때 어떻게 하는가? -> 구성
구성이 상속보다 좋은 방법임.
상속과 구성을 적절히 섞어서 프로그래밍해야함