有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java扩展对象与实现接口

试图理解一个我在考试中出错的问题:


继承与实现接口有何不同

  1. 通过继承,类从其超类获得行为
  2. 对于接口,类从其实现的接口获得行为(这是我选择的)
  3. 通过继承,类必须实现由其超类定义的方法
  4. 有了接口,类从它实现的接口中获得实例变量和行为

我的想法是接口定义行为,而超类定义特征。。。还是它们是一样的?还是我的理解完全落后了


编辑:我想我应该指定我知道接口和继承之间的区别。我只是想知道这两个选项使用的是行为。我不知道这位教授是在挑剔术语,还是问得不好

我知道,当你实现一个接口时,你必须实现接口中定义的所有方法。因此,我想说,接口定义了类必须具有的行为,但扩展了另一个超类(虽然它也定义了一些行为(可以给子类更多),但它似乎不像接口定义的行为那样适合。如果类实现了一个接口,那么可以确定它有特定的行为

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


共 (4) 个答案

  1. # 1 楼答案

    我认为你的一些误解可能纯粹源于语义学。描述接口的一种更直接的方式可能是,它定义了一个API,但不提供该API的实现。一个警告是我将用java作为例子,但是在一个C++语言中,实现一个接口一个特殊类型的继承——即继承一个由纯虚函数组成的类。p>

    例如,在Java中,可以将EventListener接口定义为:

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

    用问题的措辞来说,接口没有说明实现IEventListener接口的类在接收事件时的行为。它只确保实现该接口的任何类都具有能够接收事件类型事件的特征

    另一方面,继承允许超类也继承行为(实现)。例如,考虑下面的java基类:

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

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

    所以你的答案(2)是不正确的,因为接口没有只指定行为(实现)API(特征)。继承可以同时处理这两个问题

    我认为问题的重点是要解释,当您想要共享行为而不仅仅是API时,继承特别有用。这就是说,实现(行为)也可以通过组合来共享,这样的策略通常更好——请参阅布洛赫的《高效Java》中的第16项,以获得极好的讨论

  2. # 2 楼答案

    实现x接口的对象告诉对象它必须执行接口定义中列出的所有操作(方法)。因此,在实现x的对象中,需要实现所有操作。无法实例化接口

    但是当您从对象y继承时,对象y可能已经实现了一些操作。如果没有,该方法将被标记为抽象(在java中),您需要在继承的对象中实现它

  3. # 3 楼答案

    当你实现一个接口时,你不一定非常关心它的实现。还请记住,您可以实现任意多个接口,因为它们只指定契约,而不指定如何实现契约。界面的创建者可以让你处理这个问题

    当你扩展一个对象时,通常是因为你需要一些已经存在的对象已经拥有的功能,但是只需要额外的一点。或者,您希望重新定义现有对象的某些现有行为

    给你答案:1是正确的。您不必实现超类(继承)的方法。只有在抽象时,这个超类的下一个子类才需要实现这些方法(比如在接口中)

  4. # 4 楼答案

    正确答案是1。您选择的答案(选项2)是错误的,因为接口在技术上没有任何行为。它们只是一系列抽象方法。您可以将它们视为模板,您可以在此基础上创建类。例如,假设一个项目分为两部分,最后需要集成。每个团队都可以使用一个公共接口来建立他们的类,这样集成就容易多了