如果我的课程implements
有接口,那么我可以说我正在继承吗?我知道当一个类是extends
另一个类时,它就是继承。
如果我的课程implements
有接口,那么我可以说我正在继承吗?我知道当一个类是extends
另一个类时,它就是继承。
Answers:
更新:我已经修改了这个答案。值得大声疾呼的评论中提出了许多优点。
如果我的课程实现了接口,那么我可以说我正在继承吗?
“继承”是什么意思还不清楚。让我们问一个稍微不同的问题吗?
什么是继承?
这些有细微的不同。不幸的是,因为这令人困惑。
这种微妙的区别通常会引起什么混乱?
因为人们将继承视为共享实现细节的机制,所以可能会造成混乱。尽管这是一种机制,但是该机制通过共享成员起作用。这些成员不需要实现!正如我们将看到的,它们可以是抽象的。
如果Java和C#规范使用“继承”以外的词来描述接口方法和类之间的关系,以避免这种混淆,我个人会更高兴。但他们不这样做,我们必须理性,从规格,而不是反对他们。
在Java中,接口成员是否由实现它们的类继承?
是的,有些。请参阅Java规范第8.4.8节,为方便起见,在此引用。
类C从其直接超类和直接超接口继承所有满足以下所有条件的抽象方法和默认方法m:[...]
如果您说一个类实现了一个接口,则该类将继承该接口的抽象方法和默认方法。(当然,我省略了下面的条件;有关详细信息,请参见规范。特别是,实现接口的成员的类不被视为已继承该成员。这再次令人困惑吗?是。)
我们通常在Java中说类是从接口继承的吗?
通常,我们会说一个类实现一个接口。如上所述,类可以从接口继承成员,但仍不能说是从接口继承。是的,这令人困惑。
这种微妙的区别在日常工作中是否重要?
通常不会。规范的这种狭窄的解析对编译器编写者比业务开发人员更有用。理解何时使用接口比获得“继承自”的精确定义更为重要。
java
所以这是正确的答案,除非OP意味着其他java
:-)
继承意味着为超类编写新的子类。针对接口编写新类将实现该接口。(并基于旧接口编写新接口将扩展该接口。)
适用于所有三种可能性的唯一正确术语是子类型化。并非每个子类型都是一个子类。