我认为标题是不言自明的。
因此,假设我有以下代码:
interface A { }
abstract class B { }
class C { }
C c = new C();
System.out.println(c instanceof A); //fine
System.out.println(c instanceof B); // compile error
在the question的评论中,我读到以下内容:
编译器永远无法知道给定类型是否未实现接口,因为潜在的子类可以实现该接口。
因此,如果对
interface
有效,为什么对abstract class
不起作用?它也应该由其他类进行扩展,因为它本身不能存在。有人可以澄清吗?更新资料
编译消息:
错误:(22、28)Java:不兼容的类型:C无法转换为B
最佳答案
很简单:C扩展了Object。 C的子类不可能扩展B。您不能添加另一个基类,因为Java不支持多重继承。
而C的子类可以很好地实现该附加接口。
但是根本无法将C对象也变成B实例。
所以:
D extends C implements B // obviously all fine
而
D extends B extends C
是不可能的。因为B已经定义为除了Object之外不扩展任何东西。当然,这里的“窍门”是,类B,C都是已知的,并且正如所说的:C不是扩展B。
关于java - Instanceof不会显示带有接口(interface)的编译错误,但是带有抽象类会显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51108439/