나는 다소 당황 스럽다. 클래스 animal
을 가지고 있습니다. 위치 등의 기본 정보를 저장한다고 가정 해 봅시다. 그러면 animal
을 확장하는 클래스 smartAnimal
이 있습니다. smartAnimal
이 사용자의 입력없이 의사 결정을 할 수있는 기능을 추가한다고 가정 해 보겠습니다.Java의 적절한 상속 아키텍처
는 지금, 나는 animal
를 확장하는 클래스 dog
있습니다. 해당 기능이 필요 없기 때문에 smartAnimal
을 확장하지 않습니다. dog
가 animal
이며 smartAnimal
은 animal
입니다 : 지금까지 난 괜찮아. 하지만 지금은smartAnimal
을 확장 할 것이지만 smartDog
도 dog
해야 smartDog
것을 원한다. 예를 들어, 일반 dog
의 많은 기능이 있는데, .sniff()
, .poop()
및 .bark()
도 내 smartDog
에 있어야하지만 자바가 다중 상속을 허용하지 않기 때문에 글자를 그대로 복사 + 붙여 넣기하지 않는 한 그대로 사용하지 마십시오. 내가 가진 경우 때문에
구성은 우아 보인다
class smartDog{ smartAnimal thisSmartAnimal; dog thisDog; }
animal
의 위치를 "물건"을 복제 할 것입니다. 두 세트의 위치 변수를 처리해야합니다. animal
에있는 모든 속성의 중복. 의는 dog
는 인터페이스, .sniff()
, .poop()
이었다 가정 해 봅시다 때문에, 중 적절한 솔루션을 같은 소리하지 않는 여러 인터페이스를 상속 및 .bark()
의 구현 은 다양하고 smartDog
하고 무엇을 위해 다시 구현 될 필요는 없습니다 다른 클래스.
여기에서 가장 좋은 방법은 무엇입니까? 즉, 두 클래스가 모두 dog
과 smartDog
입니까?
는 편집 :
코멘트/답변의 일부에서, 저를 명확히하자. 내 특정 프로젝트에서 smartAnimal
실제로 그것을 제어하는 전체 신경망이 있습니다. 그것은 많은 코드이며 인터페이스로 추상화하는 것이 타당하지 않습니다. NN 기능의 핵심은 동물에 상관없이 동일하지만 각 smartAnimal
하위 클래스는 AI "두뇌"의 출력을 다르게 구현합니다. 반대로, 각 동물은 인간이 그것을 제어하든, 아니면 AI 자신의 AI 에이전트가 제어하든 상관없이 동일한 기능을 수행합니다.
'smartDog'는'dog'을 연장해야합니다. –
그러나 똑같은 상황에 처하게 될 것입니다 만, 그 반대의 경우도 smartDog에 'smartAnimal' 기능을 복사 + 붙여 넣기해야합니다 ... – honkbert
오, 알아요. 지금은 자바 SE에서 어렵다. 예를 들어 스칼라 또는 IoC 패턴을 사용하는 동안 더 간단하다. –