2012-09-10 3 views
36

클래스를 확장하지 않고 동적 다형성을 달성하는 방법에 대한 인터뷰에서 질문을 받았습니다. 어떻게 할 수 있습니까?클래스를 확장하지 않고 동적 다형성을 달성하는 방법

+3

상속없이 클래스 또는 다형성을 확장하지 않고 다형성을 사용합니까? – Santosh

+2

Java에서 상속없는 다형성은 불가능합니다. – yegor256

+0

@ yegor256 이는 인터페이스가 수행하는 것입니다. –

답변

39

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

+0

OP에 대한 귀하의 의견에서 자바 _에서는 상속이없는 _polymorphism이 가능하지 않지만 캡슐화를 통해 다형성 예제를 제공합니다. 이 예는 앞의 문장과 모순 되는가? – jaco0646

30

간단한 해결책은 기본 클래스를 확장하는 대신 인터페이스를 구현하는 클래스를 작성하는 것입니다.

또 다른 해결책은 동적 프록시를 만드는 것입니다. 이것은 본질적으로 클래스를 명시 적으로 작성하지 않고 인터페이스를 구현하는 영리한 방법입니다. 자세한 내용은 Proxy javadoc을 참조하십시오.

예, 여기에 중요한 패턴은 디자인 패턴이 아닌 구현 기술이지만 데코레이터 패턴의 예입니다 (또는 될 수 있습니다).

3

제 경험에 따르면 대부분의 취업 면접에서는 질문이 너무 정교한 답을 찾지 못하고 대부분의 시간은 까다로운 질문이므로 수업을 연장하지 않고 다형성을 구체적으로 질문하면 :

예, 당신은 그들이 다음은 프록시 패턴이나 다른 뭔가를 가지고 확인 될 더 많은 옵션을 요구한다면

다음 클래스를 인터페이스를 구현하기보다는 확장하여 동적 다형성을 가질 수 있습니다.

희망 하시겠습니까?

+2

훌륭한 면접관은 1) 알고있는 바가 무엇인지, 2) 적절한 해결책을 고르는 방법을 알고 있는지, 3) 의사 소통이 잘되는지 등을 찾으려고합니다. 그렇습니다. 올바른 해결책은 간단한 해결책을 제시하는 것이고, 다른 해결책과 관련 디자인 패턴이 있다는 것입니다. 짧은 대답이 요구되거나 예상되는 "길고 매혹적인"대답은 의사 소통 기술 (IMO)이 좋지 않음을 나타냅니다. –

+0

그러나 나는이 질문을 기술적 인 정보를 요구하는 것으로 읽었으며 인터뷰 문맥에서 무엇을 말할 것인가에 대한 조언이 아니라고 덧붙여 야합니다. –

+2

'짧은 대답이 요구되거나 예상되는 곳에서 길고 힘든 대답 "은 의사 소통 기술이 부족함을 나타냅니다.'; 또는 지식의 부족, 그래? 그리고 그 차이는 중요합니다 (IMO). 누군가에게 자바 디자인 패턴을 가르치는 것보다 의사 소통 기술을 향상시키는 것이 더 많은 돈을 요하는 경우 일 수 있습니다. –

관련 문제