클래스를 확장하지 않고 동적 다형성을 달성하는 방법에 대한 인터뷰에서 질문을 받았습니다. 어떻게 할 수 있습니까?클래스를 확장하지 않고 동적 다형성을 달성하는 방법
답변
Decorator design patternencapsulation이 당신이 찾고있는 것입니다. 상속을 통해
다형성 : 밀봉 통해
class Cat {
void meow() {
// meow...
}
}
class Lion extends Cat {
}
다형성 (데코레이터 패턴)
interface Cat {
void meow();
}
class Lion implements Cat {
private Cat cat;
void meow() {
this.cat.meow();
}
}
PS. 데코레이터에 대한 추가 정보 : http://www.yegor256.com/2015/02/26/composable-decorators.html
OP에 대한 귀하의 의견에서 자바 _에서는 상속이없는 _polymorphism이 가능하지 않지만 캡슐화를 통해 다형성 예제를 제공합니다. 이 예는 앞의 문장과 모순 되는가? – jaco0646
간단한 해결책은 기본 클래스를 확장하는 대신 인터페이스를 구현하는 클래스를 작성하는 것입니다.
또 다른 해결책은 동적 프록시를 만드는 것입니다. 이것은 본질적으로 클래스를 명시 적으로 작성하지 않고 인터페이스를 구현하는 영리한 방법입니다. 자세한 내용은 Proxy
javadoc을 참조하십시오.
예, 여기에 중요한 패턴은 디자인 패턴이 아닌 구현 기술이지만 데코레이터 패턴의 예입니다 (또는 될 수 있습니다).
제 경험에 따르면 대부분의 취업 면접에서는 질문이 너무 정교한 답을 찾지 못하고 대부분의 시간은 까다로운 질문이므로 수업을 연장하지 않고 다형성을 구체적으로 질문하면 :
예, 당신은 그들이 다음은 프록시 패턴이나 다른 뭔가를 가지고 확인 될 더 많은 옵션을 요구한다면
다음 클래스를 인터페이스를 구현하기보다는 확장하여 동적 다형성을 가질 수 있습니다.
희망 하시겠습니까?
훌륭한 면접관은 1) 알고있는 바가 무엇인지, 2) 적절한 해결책을 고르는 방법을 알고 있는지, 3) 의사 소통이 잘되는지 등을 찾으려고합니다. 그렇습니다. 올바른 해결책은 간단한 해결책을 제시하는 것이고, 다른 해결책과 관련 디자인 패턴이 있다는 것입니다. 짧은 대답이 요구되거나 예상되는 "길고 매혹적인"대답은 의사 소통 기술 (IMO)이 좋지 않음을 나타냅니다. –
그러나 나는이 질문을 기술적 인 정보를 요구하는 것으로 읽었으며 인터뷰 문맥에서 무엇을 말할 것인가에 대한 조언이 아니라고 덧붙여 야합니다. –
'짧은 대답이 요구되거나 예상되는 곳에서 길고 힘든 대답 "은 의사 소통 기술이 부족함을 나타냅니다.'; 또는 지식의 부족, 그래? 그리고 그 차이는 중요합니다 (IMO). 누군가에게 자바 디자인 패턴을 가르치는 것보다 의사 소통 기술을 향상시키는 것이 더 많은 돈을 요하는 경우 일 수 있습니다. –
- 1. 오우거 : BaseApplication을 확장하지 않고 클래스를 사용하여 엔티티를 이동하는 방법
- 2. 활동을 확장하지 않고 roboguice 사용
- 3. 싱글 톤 및 정적 메서드로 다형성을 달성하는 방법은 무엇입니까?
- 4. 개미로 확장하지 않고 파일 이름을 얻는 방법
- 5. 클래스를 확장하지 않고 다른 클래스의 함수 하위를 만들 수 있습니까?
- 6. FragmentActivity를 확장하지 않고 SupportFragmentManager 받기
- 7. ExpandableListActivity를 확장하지 않고 ExpandableListView 사용
- 8. PHP : 동적 클래스를 반복하는 방법
- 9. 다음 ajax를 달성하는 방법
- 10. 재귀 deftype을 달성하는 방법
- 11. 클래스를 정적으로 만들지 않고 클래스를 호출하는 방법
- 12. 테두리를 확장하지 않고 div를 채우는 방법은 무엇입니까?
- 13. 이미지를 확장하지 않고 JXL을 사용하여 파일을 삽입하십시오.
- 14. JFrame을 확장하지 않고 페인트를 덮어 씁니다.
- 15. ListActivity를 확장하지 않고 ListView에 대해 onClick을 처리하는 방법?
- 16. mod_rewrite를 사용하지 않고 PHP를 확장하지 않고 실행 하시겠습니까?
- 17. 자바에서 멀티 코어를 달성하는 방법?
- 18. , UDP 포트 스캐닝을 달성하는 방법?
- 19. 플래시를 사용하여 Comet을 달성하는 방법
- 20. GWT 멀티 페이지를 달성하는 방법
- 21. NHibernate 매핑 - 이것을 달성하는 방법
- 22. Sass @extend base/default 또한 가상 클래스를 확장하지 않습니까?
- 23. C++ 다형성을 정확히 이해합니까?
- 24. iOS 상속 문제 - 하위 클래스로 클래스를 확장하지 못했습니다.
- 25. 클래스 TWO에서 클래스 ONE의 함수를 확장하지 않고 호출 하시겠습니까?
- 26. Installer를 확장하지 않고 Windows 서비스를 설치하는 방법은 무엇입니까?
- 27. 확장하지 않고 Sphere 클래스의 지오메트리에 액세스 할 수 있습니까?
- 28. tabactivity 클래스가 있지만 MapActivity 클래스를 확장하지 않고 하나의 탭 아래에 Google지도가 있어야합니다.
- 29. 동적 포함 클래스 또는 클래스를 포함하지 않고 객체 인스턴스화
- 30. 동적 클래스를 생성하여 프로젝트에 추가하는 방법
상속없이 클래스 또는 다형성을 확장하지 않고 다형성을 사용합니까? – Santosh
Java에서 상속없는 다형성은 불가능합니다. – yegor256
@ yegor256 이는 인터페이스가 수행하는 것입니다. –