接口和抽象类作用:接口: 定义必须的行为,强制实现类遵守特定规范。抽象类: 定义通用行为,强制子类继承它,提供部分实现,允许子类定制特定行为。设计原则:接口: 保持小而专注,定义必须的行为。抽象类: 仅声明抽象方法,提供具体方法以实现通用行为。示例:形状类层次结构中,shape 接口定义获取面积行为,abstractshape 抽象类提供宽度和高度字段,rectangle 和 circle 类继承抽象类并提供特定形状的面积计算方法。
Java 中接口和抽象类的作用和设计原则
接口
- 定义方法但不提供实现。
- 声明一系列公共常量。
- 强制实现它的类提供所有方法的实现。
- 语法:
public interface InterfaceName { ... }
抽象类
- 定义方法,可以是抽象方法或具体方法。
- 抽象方法没有实现,必须由子类实现。
- 允许字段和构造函数。
- 语法:
public abstract class AbstractClassName { ... }
作用
接口
- 实现解耦,允许类专注于自己的职责。
- 促进模块化和可扩展性,使组件可以轻松地互换和扩展。
- 定义行为合同,强制实现类遵守特定规范。
抽象类
- 定义通用行为并强制子类继承它。
- 提供部分实现,减少子类中的重复代码。
- 提供钩子方法,允许子类定制特定行为。
设计原则
接口
- 仅定义必须的行为。
- 方法名称应清晰简明,表示预期行为。
- 接口应该保持小而专注。
抽象类
- 仅声明抽象方法,定义公共行为。
- 提供具体方法以实现通用行为。
- 考虑使用抽象类而不是接口,当需要共享实现时。
实战案例
考虑一个简单的形状类层次结构:
**`
java
interface Shape {
double getArea();
}
abstract class AbstractShape implements Shape {
protected double width; protected double height; public AbstractShape(double width, double height) { this.width = width; this.height = height; } public double getWidth() { return width; } public double getHeight() { return height; }
}
class Rectangle extends AbstractShape {
public Rectangle(double width, double height) { super(width, height); } @Override public double getArea() { return width * height; }
}
class Circle extends AbstractShape {
public Circle(double radius) { super(radius, radius); } @Override public double getArea() { return Math.PI * width * width; }
}
public class Main {
public static void main(String[] args) { Shape rectangle = new Rectangle(4, 5); Shape circle = new Circle(3); System.out.println("Rectangle area: " + rectangle.getArea()); System.out.println("Circle area: " + circle.getArea()); }
}
在这个例子中: * `Shape` 接口定义了一个通用行为:获取形状面积。 * `AbstractShape` 抽象类提供了通用行为的通用实现,例如宽度和高度字段。 * `Rectangle` 和 `Circle` 类通过继承 `AbstractShape` 类来扩展形状类层次结构,并提供特定形状的具体方法来计算面积。
以上就是Java 中接口和抽象类的作用和设计原则的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!