2013-07-23 7 views
-2

이론적 질문 : 수퍼 클래스에서 서브 클래스 B를 만들 수 있습니까? 특정 인스턴스 변수/메소드를 제외한 모든 A 인스턴스 변수/메소드를 상속받습니다. 수퍼 클래스 A?Java : 모든 수퍼 클래스 인스턴스 변수/메소드가없는 하위 클래스 상속

+2

음 ... 아니요. 전혀 그렇지 않다. –

+2

필요가 있다면 상속을 잘못 사용하는 것입니다. [Liskov Substitution Principle] (http://en.wikipedia.org/wiki/Liskov_substitution_principle)을 깨뜨릴 것입니다. –

+0

끝으로? 싫어하는 것을 무시할 수 있습니다. – Thilo

답변

6

상황에 A가 너무 많아 기본 클래스가 좋지 않다는 것을 알 수 있습니다.

상속에 일반적으로 유용 할 것으로 예상되는 A 구현 부분을 포함하는 C 클래스를 만듭니다. A와 B 모두를 C로 확장하여 요구 사항에 맞게 작성하십시오. C는 추상적 일 수 있습니다. B가 상속 경우

+2

이것은 가장 정확한 대답입니다. 가난한 솔루션에 구두를 신기 려하지 말고 디자인을 수정하십시오. 1 + –

+2

+1. 또는 코드 재사용을 위해 하위 클래스에 너무 많이 의존하지 말고 대신 작성 및 위임을 사용하십시오. – Thilo

-2

상속하지 않으려면 비공개로 설정하십시오.

+4

글쎄, 당신은 그것을 사적인 것으로 만들지도, 그것은 여전히 ​​"계승"되어 있습니다. 그것은 단지 아이가 그것에 접근 할 수 없다는 것입니다. 그러나 그것은 여전히 ​​자녀의 "일부"입니다. –

-1

그냥 지우려면 B는 A의 인스턴스 변수를 포함하지 않고 A의 메소드를 상속합니다.

B가 A의 특정 메소드 나 변수를 상속하지 않기를 바란다면 최종 키워드를 선언 할 수 있습니다.

+1

''B가 A의 특정 메소드 나 변수를 상속받지 않기를 바란다면 최종 키워드를 선언 할 수 있습니다. "- final은 메소드가 오버라이드되는 것을 막기 때문에 잘못되었습니다. 상속 된. [참고] (http://docs.oracle.com/javase/tutorial/java/IandI/final.html)를 참조하십시오. –

4

호, 그것이 A. 이르기 상속 (비록 수 오버라이드 A. 의해 제공된 메소드 구현)

가 그러나 A B 내부는 A 래핑 수 상속보다 컴포지션을 사용합니다. B에서 노출하려는 특정 인스턴스 메소드 만 노출합니다.

관련 문제