Java接口功能手册

简介

Java接口是一种规范,用于定义类之间的通信协议。它提供了一种方式,使得多个类能够遵循相同的接口规范,从而实现代码的模块化和灵活性。本文将介绍Java接口的基本概念、使用方法以及常见应用场景。

基本概念

在Java中,接口是一种抽象类型,它定义了一个类所具有的方法,但是并不提供具体的实现。接口中的方法默认是抽象的,不包含任何实现代码。一个类可以实现多个接口,并且需要实现接口中定义的所有方法。

接口的定义使用interface关键字,例如:

public interface Flyable {
    void fly();
}

上面的代码定义了一个名为Flyable的接口,它包含了一个名为fly的抽象方法。

接口的使用

要使用一个接口,需要定义一个类实现该接口,并提供接口中定义的所有方法的具体实现。使用implements关键字来实现一个接口,例如:

public class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("The bird is flying");
    }
}

上面的代码定义了一个名为Bird的类,它实现了Flyable接口,并提供了fly方法的具体实现。

接口的应用场景

接口在Java中有广泛的应用场景,下面介绍几个常见的应用场景。

定义回调接口

回调是一种常见的设计模式,它允许一个对象在某个特定事件发生时通知其他对象。通过使用接口,可以定义一个回调接口,并将其作为参数传递给其他对象。

例如,定义一个回调接口OnCompleteListener

public interface OnCompleteListener {
    void onComplete();
}

然后,在某个对象需要通知其他对象时,调用回调方法:

public class Task {
    private OnCompleteListener listener;
    
    public void setOnCompleteListener(OnCompleteListener listener) {
        this.listener = listener;
    }
    
    public void doTask() {
        // 执行任务
        if (listener != null) {
            listener.onComplete();
        }
    }
}

其他对象可以通过实现OnCompleteListener接口来接收通知:

public class MainActivity implements OnCompleteListener {
    public void startTask() {
        Task task = new Task();
        task.setOnCompleteListener(this);
        task.doTask();
    }
    
    @Override
    public void onComplete() {
        // 处理任务完成的逻辑
    }
}

实现多态

接口的一个重要特性是它可以用于实现多态。通过使用接口作为方法参数或返回类型,可以实现对多个实现类的统一调用。

例如,定义一个接口Shape,并让不同的几何形状类实现该接口:

public interface Shape {
    double getArea();
}

public class Circle implements Shape {
    private double radius;
    
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

public class Rectangle implements Shape {
    private double width;
    private double height;
    
    @Override
    public double getArea() {
        return width * height;
    }
}

然后,可以编写一个方法,接受一个Shape类型的参数,并调用其getArea方法:

public class Main {
    public static void printArea(Shape shape) {
        System.out.println("Area: " + shape.getArea());
    }
    
    public static void main(String[] args) {
        Shape circle = new Circle();
        Shape rectangle = new Rectangle();
        
        printArea(circle);
        printArea(rectangle);
    }
}

实现多继承

在Java中,一个类只能继承一个父类,但可以实现多个接口。这使得接口成为实现多继承的一种方式。

例如,定义两个接口RunnableSwimmable

public interface Runnable {
    void run();
}

public interface Swimmable {
    void swim();
}

然后,定义一个类同时实现这两个接口:

public class Dog implements Runnable, Swimmable {