0

下面的说法正确吗?如果 A 和 B 都是接口或类,则 A extends B 是正确的

怎么可能是真的?如果 A 是一个接口,B 是一个类,那么接口不能继承一个类。或者我们可以吗?如果是这样,请您提供一些支持示例。

4

3 回答 3

1

在这种情况下,我猜这些是可能的输出 -

  1. A 扩展 B(如果两者都是接口)
  2. A 扩展 B(如果两者都是类)

如果不是 1,一个接口可以毫无问题地扩展另一个接口。

@rzwitserloot 已经回答了其余的问题。

于 2020-09-15T02:29:48.200 回答
1

根据上下文,“扩展”用于“类型 X 是类型 Y 的子类型”的一般概念。

例如,给定:

interface INTERFACE {}

class CLASS implements INTERFACE {}

那么说CLASS implements INTERFACE肯定是正确的。

根据上下文,有人可能会说CLASS extends INTERFACE

例如,INTERFACE x = new CLASS();将是合法的,这表明到底,CLASSINTERFACEhere的子类型。

作为第二个示例,在泛型边界中,关键字extends用于指示子类型关系,这可以通过接口来实现。例如,这是真正的 java 代码:

interface INTERFACE {}

class CLASS implements INTERFACE {}

List<? extends INTERFACE> someList;
someList = new ArrayList<CLASS>();

注意,extends这里使用。如果你写List<? implements INTERFACE>了,那将是一个编译时错误。

如果这是某种家庭作业问题,那么术语的问题是没有德雷德法官。

There's nobody out there with a book of terms in hand who will slap you into next week if you get it wrong. If someone decides to say in casual conversation that, say, ArrayList extends List (note that ArrayList is a class, List is an interface), it's not particularly useful to talk about right and wrong. The point of opening your mouth and making air pass through your vocal cords is to communicate; to convey notions and ideas.

如果打开你的 yap 练习的目的是传达ArrayList一个子类型的概念,List并且对于代码需要 a 的任何和所有地方都足够了List,那么我个人会说试图通过说 'ArrayList extends List ' 是公平的游戏...... - 并且,就重点是传达 ArrayList 是一个子类型而言,它是完全正确的。

如果你决定听到“如果我写class ArrayList extends List {},那么它就会编译”——好吧,那么你有一个典型的沟通不畅的问题。说话者的意图是一件事,你理解的是另一件事。无时无刻不在发生。更小心地选择单词并更接近语言规范会有所帮助,但正如我已经展示的那样,java本身extends在某些上下文中使用表示“子类型”,而在其他上下文中,它仅表示“这是我的父类” ',而这些概念并不完全相同。

于 2020-09-15T02:19:13.230 回答
0

一个接口可以扩展其他接口。

一个类实现了多个接口。

一个类只扩展一个类。

接口不能扩展类

我们在java中使用接口概念是因为如果我们想在java中使用多重继承。在Java7之前,我们无法在接口中编写非抽象方法,但从java8 开始,我们可以使用defaultstatic关键字编写非抽象方法。

于 2020-09-15T05:23:00.170 回答