考虑以下语句:假设类 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/