簡體   English   中英

具有繼承接口的Java重載方法

[英]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);

謝謝

因為編譯器只知道aIA的實例。 過載在基於編譯時間類型所涉及的表達式的編譯時確定的,並且在編譯時間類型aIA

(將此與覆蓋進行比較,其中在執行時根據所涉及的實際類型選擇方法實現。)

這條線

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM