MST
星途 面试题库

面试题:Java接口继承与类继承在方法重写上的差异

对比Java中类继承和接口继承在方法重写方面的不同点。例如,在类继承中重写方法需要遵循一定的访问修饰符规则,接口继承在类似场景下有何特殊之处?同时,说明接口默认方法和静态方法在接口继承体系中的作用和重写规则。
26.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

类继承和接口继承在方法重写方面的不同点

  1. 访问修饰符规则
    • 类继承:在类继承中,重写方法的访问修饰符不能比被重写方法的访问修饰符更严格。例如,如果父类方法是protected,子类重写该方法时可以是protectedpublic,但不能是private。这是为了确保子类对象在使用时能保持与父类对象一致的行为可见性。
    • 接口继承:接口中的方法默认是public的,实现接口的类重写接口方法时必须使用public修饰符。因为接口定义的是一种契约,实现类必须保证这些方法对外部是公开可访问的,以符合接口所定义的行为规范。
  2. 方法实现
    • 类继承:父类方法通常有具体实现,子类重写方法时可以根据需求修改实现逻辑,但要保持方法签名一致(方法名、参数列表、返回类型)。在Java 5.0及之后,返回类型可以是被重写方法返回类型的子类型(协变返回类型)。
    • 接口继承:接口中的方法默认是抽象的(Java 8之前),没有方法体。实现接口的类必须为接口中的所有抽象方法提供具体实现。从Java 8开始,接口可以有默认方法和静态方法。

接口默认方法和静态方法在接口继承体系中的作用和重写规则

  1. 默认方法
    • 作用:默认方法为接口提供了一种向后兼容的机制。在不破坏现有实现类的前提下,可以为接口添加新的方法。例如,java.util.List接口在Java 8中添加了sort默认方法,现有的ArrayListLinkedList等实现类无需显式实现sort方法就能使用该功能。
    • 重写规则:实现类可以选择重写接口的默认方法。如果一个类实现了多个接口,而这些接口中有相同签名的默认方法,那么该类必须重写这个默认方法,以消除冲突。同时,子类重写默认方法时遵循与类继承中方法重写相同的访问修饰符规则(不能更严格)。
  2. 静态方法
    • 作用:接口的静态方法提供了一种与接口相关但不依赖于接口实现类实例的工具方法。例如,java.util.Comparator接口中的comparing静态方法,用于创建一个比较器。它使得接口可以像类一样拥有一些工具性的静态操作,而不需要创建实例。
    • 重写规则:接口的静态方法不能被重写。因为静态方法属于接口本身,而不是接口的实例,不存在在实现类中重写的概念。实现类只能通过接口名来调用静态方法,例如Comparator.comparing(...)