Java 中,接口(interface) 是一种抽象的类型,它定义了一组方法,但没有具体的实现。接口用于描述对象的行为(可以理解为“能力”),它的实现类需要提供这些方法的具体实现。接口是Java面向对象编程中非常重要的概念。它提供了一种定义标准和规范的方式,提高了代码的可复用性和可维护性。通过接口,我们可以实现多态、解耦等面向对象编程的特性。本文主要介绍Java 面向对象 接口(interface)。

1、Java 接口(interface)

在Java中实现抽象的另一种方法是使用接口(interface)。接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。下面看一下接口使用示例。

例如:

// interface
interface Animal {
  public void eat(); // 接口方法(没有实现)
  public void run(); // 接口方法(没有实现)
}

要访问接口方法,必须实现接口 (有点像继承的),由另一个类使用implements关键字(而不是extends)。接口方法的实现由用implements关键字的类提供:

例如:

public class Main {
  public static void main(String[] args) {
    Cat myCat = new Cat();  // 创建Cat对象
    myCat.eat();
    myCat.sleep();
  }
}
// Interface
interface Animal {
  public void eat();   // 接口方法(没有实现)
  public void sleep(); // 接口方法(没有实现)
}

// Cat 实现 Animal 接口
class Cat implements Animal {
  public void eat() {
    // 这里提供了eat()的实现
    System.out.println("吃鱼");
  }
  public void sleep() {
    // 这里提供了sleep()的实现
    System.out.println("Zzz");
  }
}

注意

1 ) 与抽象类一样,接口不能用于创建对象

2 ) 接口方法没有实现-实现由使用implements关键字类提供

3)在实现接口时,必须重写其所有方法

4)接口中的方法在默认情况下public abstract

5)接口属性默认情况下public static final

6)接口不能包含构造函数(因为它不能用于创建对象)

Java不支持多继承(一个类只能从一个超类继承),使用接口可以实现多继承。但是,这可以通过接口来实现多继承。要实现多个接口,请用逗号将它们分开。

2、实现多个接口(implements)

要实现多个接口,需要用逗号分隔它们。一个类可以实现多个接口,这样可以继承多个接口的功能。

例如:

public class Main {
  public static void main(String[] args) {
    DemoClass myObj = new DemoClass();
    myObj.myMethod();
    myObj.myOtherMethod();
  }
}
interface FirstInterface {
  public void myMethod(); // 接口方法
}

interface SecondInterface {
  public void myOtherMethod(); // 接口方法
}

class DemoClass implements FirstInterface, SecondInterface {
  public void myMethod() {
    System.out.println("myMethod");
  }
  public void myOtherMethod() {
    System.out.println("myOtherMethod");
  }
}

3、接口和类的区别

1)接口不能用于实例化对象。

2)接口没有构造方法。

3)接口中所有的方法必须是抽象方法。

4)接口不能包含成员变量,除了 static 和 final 变量。

5)接口不是被类继承了,而是要被类实现。

6)接口支持多继承。

4、接口中的默认方法(Java 8+)

Java 8 引入了接口中的默认方法,可以在接口中提供方法的默认实现,避免了需要在每个实现类中重复相同的实现。

interface Animal {
    void eat();
    
    // 默认方法
    default void breathe() {
        System.out.println("Animal is breathing.");
    }
}

class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.eat();
        dog.breathe();  // 默认方法可直接使用
    }
}

5、接口中的静态方法(Java 8+)

接口还可以定义静态方法,静态方法必须通过接口名来调用,不能通过实现类的实例来调用。

interface Animal {
    static void sound() {
        System.out.println("Animal makes a sound.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal.sound();  // 通过接口名调用静态方法
    }
}

推荐文档