java - 从父类(super class)型方法作用于类子类型的意义上来说,接口(interface)是否像抽象类一样?

标签 java inheritance interface

考虑以下语句:假设类 A 实现接口(interface) T。如果将类型 A 的对象传递给需要类型 T 参数的方法,则代码可以编译,但 Java 将抛出运行时异常。

我认为这是错误的。接口(interface)的行为不像抽象类,因此类型 A 的对象是类型 T 的子类(或者接口(interface)没有类型吗?)。如果这是真的,那么是否可以在类型 A 的对象上使用需要类型 T 的方法?另外,我是否假设任何需要父类(super class)对象(例如 T)的方法都适用于所有子类(A 和 A 的子类)?

喜欢

public class A implements T {}

public void method(T obj) { do stuff to obj}

A objA = new A();

method(objA);

OUTPUT: do stuff to objA // no crashing or runtime exceptions

最佳答案

如果 MyClass 实现 MyInterface,则对 MyClass 或任何从 MyClass 派生的类型的引用也是对该接口(interface)的引用。当转换为接口(interface)类型时,使用该接口(interface)的任何成员都会导致在 MyClass 实例(或从它派生的类型)上使用相应的 MyClass 成员。这些事实意味着,在大多数情况下,需要 MyInterface 的代码在引用 MyClass 时将按预期工作,但这并不总是 100% 正确。某些接口(interface)包括“可选”功能,该功能在某些但不是所有实现类中实现。例如,不可变的键值映射类可能实现 Map 接口(interface),但不支持 put 方法。如果给定一个不允许此类功能的对象的引用,则希望向传入的 Map 添加值的方法将会失败。

关于java - 从父类(super class)型方法作用于类子类型的意义上来说,接口(interface)是否像抽象类一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508951/

相关文章:

java - 无法在套接字上使用 BufferedReader/Writer 发送和接收数据

oop - 如何避免使用新类型的 Julia 中的大量样板?

typescript - 如何在 Typescript 中使用接口(interface)的一部分作为新接口(interface)?

java - 运行 weblogic 或 tomcat 时无法获取属性文件

java - 为什么String类要这样设计呢?

java - curl 是否删除换行符?

java - 从抽象类调用未声明的 super 方法时获取当前对象属性

javascript - 如何从 typescript 中的扩展类中排除接口(interface)属性

go - 在 golang 中模拟内部函数

java - 为什么在 Annotation 接口(interface)中声明 Object 的非最终公共(public)方法?