接口和抽象类都提供了抽象方法和多重继承,但它们在方法实现、实例化和访问权限上有区别。接口强制实现所有方法,不能被实例化,且方法默认是 public 的;抽象类可以包含具体方法,可以被实例化,且方法可以具有任何访问权限。接口用于定义公共行为和解耦模块,而抽象类用于定义部分行为和创建通用的基类。
Java 接口和抽象类的使用
Java 中的接口和抽象类是定义对象行为和限制的两种机制,它们具有一些共同点,但也有一些关键区别。
共同点
立即学习“Java免费学习笔记(深入)”;
1. 方法实现
- 接口中的所有方法都是抽象的,必须由实现该接口的类来实现。
- 抽象类可以包含抽象方法和具体方法(已实现的方法)。
2. 实例化
- 接口不能被实例化,而抽象类可以被实例化。
- 当实例化一个抽象类时,它的所有抽象方法必须被重写或实现。
3. 访问权限
使用场景
接口:
- 用于定义公共行为,要求实现类实现该行为。
- 用于解耦不同的模块,因为接口隐藏了实现的细节。
- 用于创建可插拔的架构,允许动态添加或更改功能。
抽象类:
- 用于定义部分行为,允许实现类扩展并修改该行为。
- 用于创建通用的基类,为子类提供公共字段和方法。
- 用于在继承层次结构中强制实施某些行为或限制。
举例
接口示例:
// 定义一个 Shape 接口,它定义了获取形状面积和周长的行为 public interface Shape { double getArea(); double getPerimeter(); }
抽象类示例:
// 定义一个 Animal 抽象类,它定义了 getName 和 makeSound 方法 public abstract class Animal { protected String name; public String getName() { return name; } public abstract void makeSound(); }