具有继承接口(interface)的Java重载方法

标签 java inheritance interface overloading

我正在尝试了解 Java 行为。使用这个接口(interface):

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的实例。重载是在编译时根据所涉及的表达式的编译时类型确定的,a 的编译时类型是IA

(将此与重写进行比较,重写在执行时根据涉及的实际类型选择方法实现。)

关于具有继承接口(interface)的Java重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601365/

相关文章:

java - JSP mysql 连接没有关闭,但是在 Java 类中它会关闭

Java 程序在没有警告的情况下停止工作

java - 如何检查列表中的元素是否相同?

Java - 接口(interface)扩展自身

java - 从 BroadcastReceiver 对象访问类

scala - 如何将结果类型与要匹配的抽象类的子类进行比较?

swift - 有没有一些方法可以检查类是否是从泛型类型继承的?

javascript - 使用 TypeScript 扩展 Object.prototype

抽象方法中的 C# 可选参数

c++ - C++继承中名字隐藏的优先级