为什么接口类型被认为与重载完全不同?

rb612:

约书亚·布洛赫(Joshua Bloch)在《有效的Java》中提到重载时说:

如果始终清楚哪个重载将应用于任何给定的一组实际参数,则导出具有相同数量的参数的多个重载就不会使程序员感到困惑。当每对重载中的至少一个对应的形式参数在两个重载中具有“根本不同”的类型时,就是这种情况。如果显然不可能将任何非null表达式强制转换为两种类型,则两种类型根本不同。

但是,接着说:

除Object以外的其他数组类型和类类型完全不同。而且,除了Serializable和Cloneable之外的其他数组类型和接口类型也有根本不同。

我的问题是,尽管Java允许多个接口实现,但为什么接口类型被认为是根本不同的呢?

例如,假设我有Foo实现interface Barable和的Bazable如果我有一对重载的方法,一个接受Barable作为参数,另一个接受Bazable,那为什么不那么模棱两可呢?例如,以下内容由于不明确的重载而无法编译:

interface Bazable {
  public void baz();
}

interface Barable {
  public void bar();
}

class Foo implements Barable, Bazable {
  public Foo() {

  }
  public void baz() {
    System.out.println("Can baz");
  }

  public void bar(){
    System.out.println("Can bar");
  }
}

class Main {
  public static void main(String[] args) {
    Foo f = new Foo();
    test(f);

  }

  public static void test(Barable t) {
    System.out.println("Using barable overload");
  }

  public static void test(Bazable t) {
    System.out.println("Using bazable overload");
  }
  
}
jaco0646:

这句话的意思,

除Serializable和Cloneable之外的其他数组类型和接口类型完全不同。

...是接口类型与数组类型完全不同,不是接口类型彼此完全不同。排除Serializable和Cloneable的原因是数组类型实现了这两个接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么GCC认为template参数是int而它是完全不同的类型?

为什么实现接口的类与Java中的接口类型不同?

为什么JSON解析不会因传递给Decode()的类型完全不同而失败?

为什么接口类型不提供“ IsNil”方法?

为什么方法返回接口类型的对象?

为什么dotnet运行与VS Code调试完全不同

C#-为什么要放置接口泛型约束而不是仅传递接口类型?

为什么不能在接口类型上引用类的方法

为什么我不能将对象转换为其接口类型?

为什么在Dart中有条件地强制转换为接口类型失败?

在Go中为接口类型分配<nil>为什么有效?

为什么我需要在C#显式实现中将'this'转换为接口类型?

C#-为什么我不能使IEnumerable具有通用接口类型?

Java:为什么使用通用功能比将接口类型作为功能参数更好?

为什么在C#中,属性只能包含接口类型中的setter?

为什么必须将类明确转换为其接口类型?

为什么在C#中创建对象时选择接口类型?

当问题本质上完全不同时,为什么要使用C2259?

为什么 PIL 和 matplotlib 在这里创建完全不同的图像?

为什么最后连接的字符串与代码所做的完全不同?

为什么gcc和clang会为成员函数模板参数生成完全不同的代码?

为什么Hibernate的缓存统计信息与EhCache的统计信息完全不同

shutil.copy2 给出“SameFileError”尽管文件完全不同 - 为什么?

为什么CHECKSUM_AGG()对于完全不同的输入值返回相同的值?

为什么属于同一工作的任务的持续时间在Spark Streaming中是完全不同的?

为什么在左联接中使用子查询会给出与等效表完全不同的答案?

为什么在线测试的正则表达式在C ++中表现完全不同?

为什么 max-width 和 width 显示完全不同的结果?

接口类型的变量