[英]Java Overload method with inherited interface
我試圖了解java的行為。 使用此接口:
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”,這是一個IA論證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.