接口 Day7

什么是接口?

对规则的声明,规定必须做什么,不规定怎么做

例子:

规定必须做什么:我选择声明一个接口!名字叫支付,所有人想要支付功能,必须先实现我这个接口

不规定怎么做:有人实现了我这个支付接口,他可能是,支付宝,微信,银行卡等,每个东西内部实现不一样!

  1. 方法声明:

    • 接口中的方法默认是public abstract的。即使不显式写出这两个修饰符,编译器也会自动加上。
    • 这些方法只有签名(方法名、参数列表、返回类型),没有方法体(没有{ ... }包裹的具体实现)。
    • 例如:
      public interface Animal { void makeSound(); // 抽象方法声明 }
  2. 常量声明:

    • 接口中可以定义常量,这些常量默认是public static final的。
    • 常量必须在声明时初始化。
    • 例如:
      public interface Constants { int MAX_VALUE = 100; // 等同于 public static final int MAX_VALUE = 100; }
  3. 没有构造器:

    • 接口不能被实例化(不能使用new关键字创建接口的对象),因此接口没有构造方法。
  4. 实现:

    • 一个类使用implements关键字来实现一个或多个接口。
    • 实现接口的类必须为接口中声明的所有抽象方法提供具体的实现(方法体),否则该类必须声明为abstract类。
    • 例如:
      public class Dog implements Animal { @Override public void makeSound() { System.out.println("Woof!"); // 提供具体实现 } }
  5. 多继承:

    • Java不支持类的多继承(一个子类继承多个父类),但支持接口的多实现(一个类可以实现多个接口)。
    • 例如:
      public class SmartDevice implements Phone, Camera { // ... 必须实现 Phone 和 Camera 接口中的所有方法 }

6.接口的作用

  1. 定义规范/契约:强制要求实现类具备特定的功能。
  2. 实现多态:允许通过接口类型引用指向不同的实现类对象,调用接口声明的方法。
  3. 解耦:将方法的定义与实现分离,提高代码的灵活性和可维护性。
  4. 替代多继承:通过实现多个接口,类可以获得多种不同的能力
// 定义接口 interface Animal { void makeSound(); // 接口方法(无实现) } // 实现接口 class Dog implements Animal { @Override public void makeSound() { System.out.println("汪汪!"); } } // 另一个实现类 class Cat implements Animal { @Override public void makeSound() { System.out.println("喵喵~"); } } // 主类 public class Main { public static void main(String[] args) { Animal dog = new Dog(); Animal cat = new Cat(); dog.makeSound(); // 输出: 汪汪! cat.makeSound(); // 输出: 喵喵~ } }