gpt4 book ai didi

java - 扩展对象与实现接口(interface)

转载 作者:行者123 更新时间:2023-12-01 18:56:31 25 4
gpt4 key购买 nike

尝试理解我在测试中出错的问题:

<小时/>

继承与实现接口(interface)有何不同?

  1. 通过继承,类可以从其父类(super class)获得行为。
  2. 通过接口(interface),类可以从它实现的接口(interface)中获取行为。 (这是我选择的)
  3. 通过继承,类必须实现其父类(super class)定义的方法。
  4. 通过接口(interface),类可以从它实现的接口(interface)中获取实例变量和行为。

我的想法是接口(interface)定义行为,而父类(super class)定义特征......或者它们是相同的吗?还是我的理解完全落后了?

<小时/>

编辑:我想我应该指定我确实知道接口(interface)和继承之间的区别。我只是想知道使用术语“行为”的两个选项。我不知道教授是否对术语吹毛求疵,或者他是否问得不好。

我知道当你实现一个接口(interface)时,你必须实现接口(interface)中定义的所有方法。因此,我想说接口(interface)定义了类必须具有的行为,但是扩展了另一个父类(super class)(尽管它也定义了一些行为(可以为子类提供更多行为),但它并没有它似乎与定义行为的接口(interface)一样强烈。如果该类实现了一个接口(interface),那么您可以确定它具有某些行为。

也许这个问题是想问接口(interface)本身是否有行为的代码,或者它只是定义 - 如果这样措辞,我就会知道答案。

最佳答案

我认为您的一些误解可能纯粹源于语义。也许描述接口(interface)的更直接的方法是它定义一个 API,但不提供该 API 的实现。需要注意的是,我将使用 Java 作为示例,但在 C++ 这样的语言中,实现接口(interface)是一种特殊类型的继承,即从由纯虚函数组成的类继承。

例如,在 Java 中,您可能将 EventListener 接口(interface)定义为:

public interface IEventListener {
public void handleEvent(Event event);
}

用问题的措辞来说,该接口(interface)并没有说明实现 IEventListener 接口(interface)的类在接收事件时的行为方式,它仅确保实现此接口(interface)的任何类都具有能够接收事件的特性事件类型的事件。

另一方面,继承允许父类(super class)也继承行为(实现)。例如,考虑以下 Java 基类:

public abstract BaseClass {
public void baseMethod(int value) {
System.out.println(int);
}

public class SubClass extends BaseClass {
}

任何继承自 BaseClass 的类都获得 BaseClass 的 API(特性)和实现(行为)。换句话说,您不仅可以调用 instanceOfSubClass.baseMethod(1) 这一特性,这样做还会导致 BaseClass 中定义的行为,即 1 被打印到控制台。

所以你的答案 (2) 是不正确的,因为接口(interface)不指定行为(实现),仅指定 API(特性)。继承可以处理这两件事。

我认为问题的重点是解释当您想要共享行为而不仅仅是 API 时,继承特别有用。也就是说,实现(行为)也可以通过组合来共享,这样的策略通常更好 - 请参阅 Bloch 的有效 Java 中的第 16 条进行精彩的讨论。

关于java - 扩展对象与实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773714/

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