当前位置: 首页 > 知识库问答 >
问题:

接口扩展等同于继承吗?(Java)

仉洲
2023-03-14

我有一个关于继承定义的理论问题。一个月前我参加了一个测试,我们必须举一个遗传的例子。

这是我的答案:

public interface UserRepository extends CrudRepository<User, Long>

根据定义,extend关键字表示正在定义的类是使用继承从基派生的。然而,我的教授认为这个答案是错误的,因为我的例子是一个接口扩展,与继承无关。

接口扩展和继承有什么区别?为什么我的答案是错误的,我是否混淆了继承的定义?

共有3个答案

陆宇航
2023-03-14

也许要举一个继承的例子,我们应该指向CrudRepository中的一些东西,它是由UserRepository

鲜于允晨
2023-03-14

词语是用来表达意义的工具。如果我说“学生界面继承自人界面”,那么我使用的词是“好”,根据定义,如果每个听到我的人都立即直觉到我们有:

public interface Student extends Person {}

如果一些或所有听我/读我文章的人不这么做,这个词就定义而言是不好的。

句号。

问题是,如果“观众”人数众多,不容易列举,怎么办?如果我写了一篇博文,在接下来的20年里,我的答案会增加几十万的浏览量,那会怎么样?今天很难问一个15年后读到答案的人是否真的正确理解了我想表达的意思。

这是抱怨术语正确使用的唯一要点。显然,没有法律规定将其称为“继承”是非法的。对此有4个有用的来源:

  • 观众的知识,如果这是可知的。对于一个SO答案,它将在未来20年被阅读,这是不可知的。在教室里,它是。在开发团队的对话中,它肯定是。如果每个人都称扩展关键字的这种用法,出于某种原因,“学生ix的Person”(我编的),那么这就是要使用的词。在这里教学的作用肯定是教最有可能将您的意思传达给尽可能广泛的受众,所以这个来源基本上是无关紧要的。
  • 官方定义。官方的意思是,官方。不是“我的老师这么说”,也不是“这本教科书这么说”。那本教科书只是某人写的,而不是某种法官陪审团处决者。但是规格有一定的分量。所以让我们看看!

JLS:

如果提供了扩展子句,则声明的接口扩展了每个其他命名接口,因此继承每个其他命名接口的成员类型、实例方法和常量。

非常接近:“继承成员类型”,直接来自规范。我要说你的老师满嘴谎言,并且把他们的个人喜好作为唯一正确的答案来教授。如果你愿意,可以和他们当面对质,并确保你打印出9.1.3并给他们看。

要真正深入了解,这里有一个相关的部分,关于<code>扩展<code>ing<code>类

>

  • 普通的“俚语”-简·Q·普通程序员倾向于认为这个词是什么意思?我非常肯定,几乎每个java程序员都会直觉地认为“继承”一词至少意味着<code>类X扩展了Y<code>,并且至少会想:“…而且可能接口A扩展了B,甚至类X实现了B。换句话说,按照这个定义,如果区别很重要,那么术语就无关紧要了-说“A从B继承”“如果你不是泛泛地谈论,而是想明确地表达A和B是类,而不是接口,那幺这句话就不符合目的-它不会传达这种想法。无论JLS、你的老师或任何手册或书中的定义是什么都不重要。显然,这并不能真正确定答案,尽管它强烈地表明你是正确的。要‘证明’它,你必须我不知道,去拿个麦克风,在java会议上走来走去,问问大家他们认为这意味着什么。

    某种普遍同意的事实来源。有几本书是如此受人尊敬,他们通常受到信任;换句话说,这是一本如此值得信赖的书,如果你说:“......和[这本神圣的书]同意,见[此处的章节链接]“。在java中,也许这是有效的Java,但书籍很烦人,因为你不能以任何人都可以验证的方式轻松链接到它们(他们必须先购买这本书)。我现在没有一本,但我非常怀疑它在这里选择了任何一边,它不是那种书。

    ...就是这样。

    这很复杂,但是,本质上,你的老师在这里是错的。记下来是愚蠢的。给老师怀疑的好处,他们事先告诉你,这个练习包括记住任意无意义的东西,你会根据你记住任意规则的能力来评分;这个测试与java没有什么关系,它更像是一个记忆游戏,有java的概念。像这样的教学有一些教学基础,但是你可以进行这样的测试,而不必诉诸于以如此过于精确的方式规定“继承”等模糊术语的含义,所以,虽然这是给怀疑的好处,这意味着降级是好的,但是他们的教学方法论糟透了。

    请随意向他们展示这个答案,如果他们想讨论更精细的问题,他们可以发表评论。

  • 梁丘翔
    2023-03-14

    Java语言规范§9.1.3提到了这一点:

    如果提供了extends子句,则所声明的接口扩展每个指定的接口类型,因此继承每个接口类型的成员类、成员接口、实例方法和静态字段。

    (强调我的。)

    是的,我很确定这是继承。

     类似资料:
    • 问题内容: 快速问题,我正在学习有关接口和继承的知识。 这不是实际的代码,仅是示例。假设我有抽象类Animal。马,犬等团体有一定的继承权。还有一个“宠物”界面。它将用于Animal的不同子类。犬“狗”的子类实现接口“宠物”。因此,“狗”的所有子类也都实现了“宠物”接口,而不必在“狗”的每个子类上单独实现“宠物”,对吗? 问题答案: 如果你有: 哪里 那么所有扩展StaffMember的类都将继承

    • 问题内容: 我已经从Java背景开始使用C 进行编码(实际上,我曾在大学里学习过C ,但我们从未接触过STL等)。 无论如何,我到了要在各种集合中排列数据的地步,然后我立即告诉自己:“好吧,这是一种Set;这是一个List或ArrayList;这是地图等。” 在Java中,我只要编写任何类即可实现Set或Map或List接口。但是我可能不会继承ArrayList或HashSet之类的东西,或者不那

    • 我在下棋。我想做一个抽象的piece类,然后可以通过pawn/knight/rook/等进行扩展。假设我的piece类是这样的: 我希望Pawn具有相同的sayName功能,但我希望它具有不同的movePiece功能,因为Pawn有自己独特的移动方式。我怎么做典当,使它扩展件,并覆盖件的移动件功能?

    • 我有两个接口: 和: 从注释中可以看到,不编译。为什么不呢?我该怎么修复它呢?扩展了,所以它应该可以工作,对吗?

    • 本文向大家介绍接口可以在Java中扩展多个接口吗?,包括了接口可以在Java中扩展多个接口吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以做到。一个接口可以扩展Java中的多个接口。 例: 输出:

    • 问题内容: 我刚刚有人问我一个问题。 问 -Java是否支持多重继承? 我 -不 问-Java中的每个类都扩展了类Object(类Object除外),如果我们从外部扩展了一个类,例如 那么你可以说A类扩展了B类和Object类,这意味着它是多重继承。那么怎么说Java不支持多重继承呢? 我 -实际上,类B扩展了类Object,因此,当你在类A中扩展类B时,类A间接扩展了类Object。这是多级继承