📌 目录

  1. 什么是接口?
  2. 接口的特点
  3. 接口的声明与定义
  4. 接口的实现
  5. 接口的多继承
  6. 接口与抽象类的区别
  7. 接口的应用场景
  8. 接口的实例化
  9. 接口的示例代码
  10. 参考资料
  11. 出站链接

1. 什么是接口?

接口(Interface) 是 Java 中一种特殊的类,用于定义一组方法的集合,但不提供这些方法的实现。接口仅包含方法声明(没有方法体),由实现接口的类提供具体的实现。接口可以被任何类实现,任何类可以实现多个接口,接口支持多继承。

接口的作用是规定类必须遵循的行为规范,定义了一种契约,保证实现该接口的类提供特定的功能。


2. 接口的特点

  1. 只能声明方法:接口只能声明方法,不能包含方法的实现(默认方法除外)。
  2. 没有构造方法:接口不能有构造方法。
  3. 实现接口:类通过 implements 关键字实现接口,类必须实现接口中声明的所有方法,除非该类是抽象类。
  4. 接口可以继承接口:接口之间可以继承,支持多继承。
  5. 默认方法:从 Java 8 开始,接口可以包含 default 方法,提供方法的默认实现。
  6. 静态方法:从 Java 8 开始,接口还可以包含 static 方法。

3. 接口的声明与定义

3.1 接口的声明格式

接口使用 interface 关键字声明,格式如下:

interface InterfaceName {
    // 接口的方法声明
    returnType methodName();
}

3.2 接口的方法

  • 接口中的方法默认是 public abstract,即方法的访问权限是 public,并且没有方法体(抽象的)。
  • 从 Java 8 开始,接口可以有 defaultstatic 方法:
    • default 方法:提供一个默认的实现,子类可以选择重写这个方法。
    • static 方法:可以在接口中定义静态方法,类可以通过接口名来调用这些方法。
interface Animal {
    void sound();  // 抽象方法

    default void sleep() {  // 默认方法
        System.out.println("动物在睡觉");
    }

    static void eat() {  // 静态方法
        System.out.println("动物在吃东西");
    }
}


4. 接口的实现

类通过 implements 关键字实现接口,必须实现接口中声明的所有抽象方法。如果类没有实现接口的所有抽象方法,那么这个类也必须是抽象类。

class Dog implements Animal {
    // 必须实现接口中的抽象方法
    public void sound() {
        System.out.println("狗叫:汪汪");
    }
}


5. 接口的多继承

在 Java 中,接口可以继承多个接口,类可以实现多个接口。接口支持多继承,而类只支持单继承。

interface Animal {
    void sound();
}

interface Mammal {
    void giveBirth();
}

class Dog implements Animal, Mammal {
    public void sound() {
        System.out.println("狗叫:汪汪");
    }

    public void giveBirth() {
        System.out.println("狗是哺乳动物,生小狗");
    }
}


6. 接口与抽象类的区别

特性接口(Interface)抽象类(Abstract Class)
继承方式类实现接口 implements类继承抽象类 extends
方法实现默认方法可以有实现;其他方法无实现抽象方法没有实现;非抽象方法有实现
访问修饰符所有方法默认是 public可以使用不同的访问修饰符
多继承支持支持多继承(接口可以继承多个接口)不支持多继承(只能继承一个类)
构造方法可以有构造方法
属性只能包含 public static final 常量可以包含实例变量
子类实例化通过实现接口实例化通过继承抽象类实例化

7. 接口的应用场景

  1. 规范定义:接口可以定义一组方法签名,供不同类实现,用于不同类型对象的统一管理。
  2. 多态:接口是实现多态的一个常用方式,允许不同类使用相同的接口来提供不同的实现。
  3. 解耦:接口有助于解耦代码,类之间只通过接口交互,而不依赖于具体实现。
  4. 插件系统:接口广泛应用于插件系统,通过接口约定插件的行为,动态地增加功能。

8. 接口的实例化

接口不能直接实例化,只能通过实现接口的类来创建对象。接口本身没有构造方法,无法直接生成实例。

// 错误,接口不能实例化
Animal animal = new Animal();  // 编译错误

// 正确,通过实现接口的类来实例化
Animal dog = new Dog();


9. 接口的示例代码

示例 1:基本接口实现

interface Animal {
    void sound();  // 抽象方法

    default void sleep() {  // 默认方法
        System.out.println("动物在睡觉");
    }
}

class Dog implements Animal {
    public void sound() {
        System.out.println("狗叫:汪汪");
    }
}

public class TestInterface {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound();  // 调用 Dog 类的 sound 方法
        dog.sleep();  // 调用 Animal 接口的默认方法
    }
}

输出

狗叫:汪汪
动物在睡觉

示例 2:接口的多继承

interface Animal {
    void sound();
}

interface Mammal {
    void giveBirth();
}

class Dog implements Animal, Mammal {
    public void sound() {
        System.out.println("狗叫:汪汪");
    }

    public void giveBirth() {
        System.out.println("狗是哺乳动物,生小狗");
    }
}

public class TestMultipleInterface {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.sound();        // 输出:狗叫:汪汪
        dog.giveBirth();    // 输出:狗是哺乳动物,生小狗
    }
}

输出

狗叫:汪汪
狗是哺乳动物,生小狗


10. 参考资料


11. 出站链接