2017-09-12 5 views
3

에서 메서드를 호출하는 데 사용되는 수퍼 클래스 참조를 결정합니다. 두 번 질문했습니다. &은 어떻게 그리고 왜 그 일이 생길지에 대해 완전히 혼란스러워합니다. 여기 하위 클래스

는 시나리오입니다 :

interface IntA { 
    void someMethod(); 
} 
interface IntB { 
    void someMethod(); 
} 

두 가지 간단한 인터페이스;

IntA a = new ClassAB(); 
a.someMethod(); 

또는 다른 인터페이스를 통해 :

IntB b = new ClassAB(); 
b.someMethod(); 

이제 질문의 구현에 우리가 & 사용과 같이 인스턴스화 할 수

class ClassAB implements IntA,IntB { 
    @Override 
    public void someMethod(){ 
     //some logic 
    } 
} 

그리고 간단한 클래스 아래 구현 someMethod() 인 경우 IntA 참조 또는 IntB 참조를 사용하여를 호출하는지 확인할 수 있습니까?. 따라서 다른 논리를 실행하십시오.

솔직히 이것이 잘못된 질문이라고 생각합니다. 왜 &을 어떻게 이해할 지 모르겠다. 인터페이스의 관점에서 볼 때, 중요한 것은 기능 서명 &의 기준을 충족시키는 구현입니다. IntA & IntB이 다른 결과를 예상하는 경우 두 가지 다른 클래스로 구현해야합니다.

저는이 시나리오를 두 번 보았습니다. 따라서 저는 왜 묻고 있습니까. 결정할 수있는 방법이 있습니까? C/C++과 같은 다른 언어로이를 수행 할 수있는 방법이 있습니까?

+0

인터페이스가 다른 기능을 원한다면 다른 메소드 이름을 사용해야합니다 ... –

+0

중요한 점은 어떤 시나리오였습니까? – daniu

+0

@daniu 인터뷰 질문이었습니다. 나는 두 달 동안 무작위로 인터뷰하는 사람들에 의해이 같은 질문을 보았다. 내가 처음에 생각한 사람은 잘못된 생각이었습니다. 그 다음 제 2의 사람이 같은 일을 물었을 때, 나는 조금 의심스러워했다. – Vineet

답변

2

당신은 정말로 그렇게 할 수 없을뿐만 아니라 (복잡한 복잡한 마법사를 제외하고) 말했듯이, 당신도 말했듯이 그것을 시도 할 충분한 이유가 없습니다.

흔히 사용되는 2 개의 인터페이스에 실수로 동일한 메소드 서명을 부여한 경우 동일한 클래스에서 함께 구현되지만 별개의 기능을 사용하는 경우가 있습니다. 그러나 이것은 인터페이스 부분의 설계 오류입니다.

주위에는 깨끗한 방법이 없으며 부정한 방법조차도 너무 복잡해서 올바른 사람이 시도하지 않을 것입니다. 적절한 조치는 인터페이스 중 하나에서 다른 메소드 서명을 사용하도록 리팩토링하는 것입니다. 이 시나리오가 이미 번 두 번이되면 더 큰 디자인 문제의 징후가 될 수도 있습니다.

+0

확인해 주셔서 감사합니다. 제가 언급했을 때 저는 두 번 반대 했었습니다. 저는 두 차례의 인터뷰 세션에서 그것을 보았습니다. 나는 그들이 다른 언어로 이것을 보았고 자바가 가지고 있어야만한다고 가정하고 있다고 생각한다. – Vineet

+0

나는 '주변에 깨끗한 방법이 없다'는 말은 "인터뷰하는 회사가 요구할 경우 나쁜 소프트웨어를 디자인한다"는 의미입니다. 나는 그들이 정말로 그것을하는지 물어볼 것이고 그 필요성에 의문을 제기하는 것에 대해서는 매우 열려있을 것이다. – daniu

+0

면접관이 듣고 싶어하는 것을 때때로 알기가 어렵습니다.그들은 사람들이기도하므로 면접자가 자신의 임무를 수행하지 못하는 경우에 대비하여 제대로 작성되지 않은 질문이나 심지어 완전히 잘못된 질문을 얻을 수도 있습니다. 특히 ** 좋은 ** 프로그래머를 찾기가 어려운 현재 시장 상황에서 인터뷰하는 사람들은 그들이 알아야 할 전문가가 아닐 수도 있습니다. – Kayaman

관련 문제