接口和抽象类都是定义类间契约的机制,但接口可多重继承且只含抽象方法,而抽象类仅支持单重继承且可兼含具体方法和属性。接口更注重契约定义,促进代码重用;抽象类则提供部分继承,减少冗余,但更改抽象类时须同步修改子类。实战中,Shape 接口定义了图形的面积周长获取方法;Square 的抽象类实现了面积计算,其具体子类 SpecificSquare 则实现了周长计算。
接口和抽象类在 Java 中的异同与优缺点
在 Java 中,接口和抽象类都是用于定义类之间契约的机制。两者之间既有相似之处,也有重大差异。
相似之处
差异
特性 | 接口 | 抽象类 |
---|---|---|
访问修饰符 | 默认是 public | 可以是 public、protected 或 default |
继承 | 可以继承多个接口 | 只能继承一个抽象类 |
实现 | 只能包含抽象方法 | 可以包含抽象方法和具体方法 |
属性 | 只能包含 static 和 final 的常量 | 可以包含属性和方法 |
实例化 | 无法实例化 | 无法实例化 |
实例方法 | 只能包含抽象方法 | 可以包含抽象方法和具体方法 |
优缺点
接口
优点:
缺点:
抽象类
优点:
缺点:
实战案例
定义 Shape 接口:
public interface Shape { double getArea(); double getPerimeter(); }
创建 Square 的抽象类和具体类:
public abstract class Square implements Shape { protected double side; public Square(double side) { this.side = side; } @Override public double getArea() { return side * side; } } public class SpecificSquare extends Square { public SpecificSquare(double side) { super(side); } @Override public double getPerimeter() { return 4 * side; } }
使用 Square 接口:
Shape shape = new SpecificSquare(5.0); double area = shape.getArea(); double perimeter = shape.getPerimeter();
以上是接口和抽象类在 Java 中的异同与优缺点的详细内容。更多信息请关注PHP中文网其他相关文章!