문제

나는 자바 행동을 이해하려고 노력하고 있습니다. 이 인터페이스 사용 :

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 논쟁입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top