상속 인터페이스가있는 Java 과부하 메소드
-
05-07-2019 - |
문제
나는 자바 행동을 이해하려고 노력하고 있습니다. 이 인터페이스 사용 :
public interface IA {}
public interface IB extends IA {}
public class myClass implements IB {}
나는 다음과 같은 방법을 과부하시키고 있습니다.
public void method(IA a);
public void method(IB b);
다음 객체로 메소드를 호출 할 때 :
IA a = new myClass();
method(a);
Java가 사용하는 이유 :
public void method(IA a);
대신에
public void method(IB b);
?
감사
해결책
컴파일러는 그것을 알고 있기 때문입니다 a
인스턴스입니다 IA
. 과부하는 관련된 표현식의 컴파일 타임 유형 및 컴파일 타임 유형에 따라 컴파일 시간에 결정됩니다. a
~이다 IA
.
(메소드 구현이 선택되는 우선과 비교 실행 관련된 실제 유형을 기준으로 한 시간.)
다른 팁
라인
IA a = new myClass();
객체 A를 IA 형으로 정의하고 모든 컴파일러가 알고있는 모든 컴파일러입니다. A가 IB라고 가정 할 수는 없습니다. 이것이 사실이 될 수 있기 때문입니다.
public class MyClass2 implements IA{}
IA a = new MyClass2();
method(a);
이 경우 A는 귀하의 예에서와 같이 IB가 아닙니다. 따라서 컴파일러는 제공하는 것 이외의 유형에 대해서는 아무런 가정도하지 않습니다. 따라서 IA를 수락하는 방법을 호출해야합니다.
당신이 "a"를 통과하고 있기 때문에, chich는 IA 논쟁입니다.
제휴하지 않습니다 StackOverflow