接口:
接口在 Java 它定义了一组方法声明,为类提供了合同。接口本身不包括任何实现,它只指定了类必须实现的方法。通过实现接口,类确保它将提供界面中定义的所有方法的实现。
声明接口:
public interface MyInterface { public void print(); public int calculate(int a, int b); }
实现接口:
public class MyClass implements MyInterface { @Override public void print() { System.out.println("Hello from MyClass"); } @Override public int calculate(int a, int b) { return a + b; } }
接口的主要优点包括:
- 代码抽象: 接口将细节与接口合同分离,提供代码的抽象层。
- 多态性: 由于所有实现接口的类别都共享相同的接口类型,因此在运行过程中可以使用多态性。
- 松耦合: 基于合同使用接口编程允许类与接口松散耦合,从而提高可维护性和可扩展性。
抽象类:
抽象也是一种抽象机制,但它提供了更多的灵活性。抽象可包括抽象方法(不提供实现)和非抽象方法(实现)。
声明抽象类:
public abstract class MyAbstractClass { public abstract void doSomething(); public void doSomethingElse() { // 非抽象方法 } }
扩展抽象类:
public class MyConcreteClass extends MyAbstractClass { @Override public void doSomething() { // 实现抽象方法 } }
抽象的主要优点包括:
- 部分抽象: 抽象允许子类选择实现某些方法,而其他方法可以声明为抽象。
- 代码重用: 抽象类中可以定义非抽象方法,并由子类继承。
- 可扩展性: 抽象为扩展和添加新功能提供了方便的机制。
接口与抽象类的区别:
尽管接口和抽象类都实现了代码抽象,但它们之间存在着关键的差异:
- 实现: 界面只声明方法,抽象类可以包括抽象和非抽象方法。
- 多实现: 一个类可以实现多个接口,但只能继承一个抽象类。
- 可实例化: 接口不能实例化,抽象类可以创建对象。
接口何时使用 vs. 抽象类:
接口或抽象类的选择取决于具体要求:
- 使用接口: 当需要强制多类共享相同的合同时,或者当需要松散耦合和多态性时。
- 使用抽象类: 当需要部分抽象、代码重用或类别需要扩展现有实现时。
通过了解界面与抽象类之间的细微差别,Java 开发人员可以创建更强大的代码,提高其可读性、可维护性和可扩展性。