我是java新手,在尝试一些输出是什么
问题时我发现了这一点。
这行InterfaceB obj = new ClassA();
给出了错误,而其他行则没有。
我知道父类(super class)变量可以引用与接口(interface)相同的子类变量。 但那样的话会发生什么。我想知道所见的背后到底发生了什么。
interface InterfaceA { void methodA(); }
interface InterfaceB extends InterfaceA { void methodB(); }
class ClassA implements InterfaceA
{
public void methodA() {}
public void methodB() {}
}
class ClassB extends ClassA implements InterfaceB
{
public ClassB() {}
// InterfaceA obj = new ClassA(); no error
InterfaceB obj = new ClassA(); //give error: incompatible types
// InterfaceA obj = new ClassB(); no error
// InterfaceB obj = new ClassB(); no error
// ClassA obj = new ClassB(); no error
}
public class Online4 {
public static void main(String args[]) {
ClassB b = new ClassB();
}
}
最佳答案
您收到此错误是因为 ClassA 未实现接口(interface) B。
永远记住java中的父类型可以引用子类型。
此处,类型 IntefaceB 与类型 ClassA 没有任何关系。为了下面的工作
InterfaceB obj = new ClassA();
ClassA 需要其父类型为 InterfaceB(直接或通过任何其他实现 InterfaceB(类)或扩展 InterfaceB(接口(interface))的类型。
关于java - 为什么在引用实现该接口(interface)的类实例时此接口(interface)实例会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629009/