在超类型方法作用于类子类型的意义上,接口是否类似于抽象类



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

我认为这是错误的。接口的行为不像抽象类,所以类型A的对象是类型t的子类(或者接口没有类型?)。如果这是真的,那么不可能在类型a的对象上使用期望类型t的方法吗?此外,我的假设是,任何期望超类对象(例如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派生的任何类型的引用也是对该接口的引用。当强制转换为接口类型时,使用该接口的任何成员都将导致在MyClass的实例(或从其派生的类型)上使用相应的MyClass成员。这些事实意味着,在大多数情况下,当引用MyClass时,期望MyInterface的代码将按预期工作,但这并不总是100%正确的。一些接口包括"可选"功能,这些功能在一些但不是所有实现类中实现。例如,一个不可变的键值映射类可能实现Map接口,但不支持put方法。如果给定对不允许此类功能的对象的引用,则期望向传入的Map添加值的方法将失败。

最新更新