接口
- Java 接口是一种抽象的数据类型,它定义了一组抽象方法和常量,但没有实现任何方法的具体代码。
- 接口可以被类实现,这样实现类就必须实现接口中定义的所有抽象方法。
- 接口可以被其他接口扩展,这意味着它可以继承所有父接口的常量和抽象方法。
- 接口通常用于定义多个类需要共享的行为或属性,以及为多态编程提供一种方式。
- Java 中的许多标准库类都实现了接口,例如 Comparable、Runnable 和 Serializable 接口。
- 接口中的方法一定要被实现,可以是实现该接口的抽象类,也可以是继承了【实现该接口的抽象类】的子类,也可以抽象类与子类都实现,此时子类属性重写抽象类的方法
- 接口的注入是按照接口名称注入的,不看接口的路径,如果名称相同则无法注入
抽象类
- Java 抽象类是一种不能被实例化的类,它只能被用来继承。
- 抽象类通常包含一些抽象方法,这些方法只有声明,没有具体的实现,而具体的实现由继承抽象类的子类来完成。这样的设计可以强制子类必须实现这些方法,以实现代码的重用和扩展性。
- 抽象类可以包含非抽象方法和成员变量,但不能被实例化,只能被用来作为其他类的父类。
- 和普通类一样,抽象类也可以被继承。如果一个类继承了一个抽象类,就必须实现抽象类中所有的抽象方法,否则这个类也必须声明为抽象类。
- 可以在抽象类中定义私有方法供抽象类用
- Java 标准库中的许多类都是抽象类,例如 InputStream、OutputStream、Servlet 等。
- 抽象类是实现面向对象编程中重要的概念之一,提供了一种灵活的、可扩展的抽象设计方式。
区别
- 抽象类可以有构造方法,而接口不能。
- 抽象类可以有非抽象方法,而接口只能有抽象方法。
- 抽象类只能被单继承,而接口可以被多实现。
- 子类继承抽象类时,必须实现所有的抽象方法,而接口只需要实现自己需要的方法。
- 接口可以被实现和继承,而抽象类只能被继承
- 抽象类更多的是为了代码复用,而接口更侧重于解耦
联系
- 都不能被实例化。
- 都可以被用来实现多态。
- 都可以被用来定义一组规范。
- 都可以被用来约束子类的行为。
- 都可以被用来实现类的解耦。