gpt4 book ai didi

java - Instanceof 不显示接口(interface)的编译错误,但抽象类会显示

转载 作者:行者123 更新时间:2023-12-04 05:53:33 25 4
gpt4 key购买 nike

我认为标题是不言自明的。所以假设我有这段代码:

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 的评论我读了这个:

The compiler can never know whether a given type doesn't implement an interface because a potential subclass could implement it.

那么,如果对于 interface 这可行,为什么它不适用于 abstract class ?它也应该由其他一些类扩展,因为它不能单独存在。有人可以澄清一下吗?

更新编译消息:

Error:(22, 28) java: incompatible types: C cannot be converted to B

最佳答案

很简单:C 扩展对象。 C 的子类不可能扩展 B。您不能添加另一个 基类,因为 Java 不支持多重继承。

而 C 的子类可以很好地实现该附加接口(interface)。但是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com