Java中的类和接口是面向对象编程的两个核心概念,它们之间有一些明显的区别。以下是它们之间的主要区别:
- 定义:
- 类:类是对象的蓝图或模板,它定义了一组具有共同属性和行为的对象。类可以包含字段(变量)、方法(函数)、构造方法、内部类、枚举等。
- 接口:接口是一种完全抽象的类,它只包含抽象方法(从Java 8开始,接口也可以包含默认方法和静态方法,但默认方法必须有一个具体的实现)。接口不能包含实例字段(但可以从Java 9开始包含私有静态字段)或构造方法。
- 实现与继承:
- 类:一个类可以继承自另一个类,表示一个“是”(is-a)的关系。例如,
Dog
类可以继承自Animal
类,因为狗是动物的一种。 - 接口:一个类可以实现一个或多个接口,表示一个“有”(has-a)或“支持”(supports-a)的关系。例如,一个
Dog
类可以实现Barkable
接口,因为狗可以叫。一个类可以实现多个接口,但只能继承自一个类(除了Java中的多重继承可以通过接口实现)。
- 类:一个类可以继承自另一个类,表示一个“是”(is-a)的关系。例如,
- 抽象性:
- 类:类可以是抽象的或非抽象的。抽象类不能被实例化,但可以包含非抽象方法和抽象方法。
- 接口:接口是完全抽象的,它只能包含抽象方法(但从Java 8开始,也可以包含默认方法和静态方法)。
- 访问修饰符:
- 类:类可以有访问修饰符(如
public
、protected
、默认
(无修饰符)和private
,但private
修饰的类只能在其定义的类内部使用,通常用作内部类),但顶层类(即不在其他类内部定义的类)只能是public
或默认(包级私有的)。 - 接口:接口总是隐式地
public
的,并且不能是private
、protected
或默认(包级私有的)。
- 类:类可以有访问修饰符(如
- 设计目的:
- 类:类通常用于描述具有某些属性和行为的实体或对象。
- 接口:接口主要用于定义一组方法(契约),这些方法将由实现该接口的类来实现。接口是实现多重继承的一种方式,允许类具有多个行为。它们还用于定义插件式架构,其中插件必须遵循特定的接口才能与主程序交互。
- 字段和方法:
- 类:类可以包含字段和方法(包括静态和非静态的)。
- 接口:接口不能包含实例字段(但可以从Java 9开始包含私有静态字段),并且只能包含抽象方法(从Java 8开始也可以包含默认方法和静态方法)。
- 实例化:
- 类:类可以实例化,即创建类的对象。
- 接口:接口不能被实例化。它们只能被类实现。