面试题答案
一键面试区别
- 语法层面:
- 继承类多态:通过继承关系,子类重写父类的方法来实现多态。子类使用
extends
关键字继承父类,如class SubClass extends SuperClass
。 - 接口实现多态:类通过实现接口的方法来达成多态。类使用
implements
关键字实现接口,如class ImplementingClass implements InterfaceName
。
- 继承类多态:通过继承关系,子类重写父类的方法来实现多态。子类使用
- 功能限制:
- 继承类多态:Java 是单继承的,一个类只能有一个直接父类。这限制了类从多个父类获取属性和方法的能力。
- 接口实现多态:一个类可以实现多个接口,弥补了单继承的不足,使类可以具备多种不同类型的行为。
- 方法实现:
- 继承类多态:父类可以有方法的具体实现,子类重写方法时需要遵循父类的方法签名。父类还可以有默认方法实现,子类可以直接使用或重写。
- 接口实现多态:在 Java 8 之前,接口中的方法都是抽象的,没有具体实现,实现类必须为接口中的所有抽象方法提供实现。Java 8 引入了默认方法和静态方法,默认方法可以有具体实现,实现类可选择重写。
联系
- 多态本质:两者都是 Java 多态性的体现方式,都允许通过父类型(父类或接口)的引用操作子类型(子类或实现类)的对象,实现运行时的动态绑定,提高代码的灵活性和可维护性。
- 抽象性:都基于抽象概念,父类和接口都可以作为抽象类型,用于定义一组规范或行为,具体实现由子类或实现类完成。
在复杂体系中的多态体现与运作
- 接口继承体系:接口
A
继承接口B
,这意味着接口A
拥有接口B
的所有抽象方法,接口A
还可以定义自己特有的抽象方法。 - 类实现与继承:
- 类
C
实现接口A
,那么类C
必须为接口A
及其继承的接口B
中的所有抽象方法提供实现。此时,类C
的对象可以被视为接口A
和接口B
类型的对象,体现多态性。例如:
A a = new C(); B b = new C();
- 类
D
继承C
,类D
会继承类C
对接口A
和接口B
方法的实现。如果类D
重写了这些方法,在使用D
类对象时,通过A
或B
接口引用调用重写方法,会执行D
类中的重写版本,这也是多态的体现。例如:
A a = new D(); B b = new D(); a.someMethod(); // 这里调用的是D类重写后的someMethod方法 b.someMethod(); // 同样调用的是D类重写后的someMethod方法
- 类
- 接口的关键作用:
- 规范定义:接口
A
和B
定义了一组行为规范,类C
和D
必须遵循这些规范来实现方法,保证了不同类之间行为的一致性。 - 多态基础:接口作为抽象类型,使得不同类(如
C
和D
)的对象可以被统一地通过接口类型引用进行操作,实现多态调用,提高了代码的通用性和可扩展性。例如,在一个方法中,可以接受接口A
类型的参数,而不管实际传入的是C
类还是D
类的对象,增强了代码的灵活性。
- 规范定义:接口