Java 接口方法

概述

在面向对象的编程中,接口(Interface)是一种重要的概念。接口定义了一组方法的集合,但没有实现这些方法的具体代码。它可以看作是一种契约,规定了类必须提供的方法。接口使得不同的类可以通过实现接口来达到统一的目的,提供了一种多态的方式。

在 Java 中,接口可以被类实现(implements)或者其他接口继承(extends)。类实现接口时,必须实现接口中定义的所有方法。接口继承接口时,子接口继承了父接口的所有方法,可以进一步扩展方法。

本文将介绍 Java 中接口方法的定义与使用,并给出代码示例加以说明。

接口方法的定义

接口方法定义时不需要使用 public 或者 private 等修饰符,因为接口中的方法默认为 public,并且不允许使用 private。接口方法的定义与普通方法类似,只有方法名、参数列表和返回类型,没有方法体。

下面是一个接口 Shape 的定义,其中包含了两个方法 getAreagetPerimeter

public interface Shape {
    double getArea();
    double getPerimeter();
}

在这个接口中,getArea 方法和 getPerimeter 方法没有具体的实现。任何实现了 Shape 接口的类都必须实现这两个方法。

接口的实现

要实现一个接口,需要使用 implements 关键字。一个类可以实现多个接口,用逗号分隔。实现接口时,必须实现接口中定义的所有方法。

下面是一个实现了 Shape 接口的类 Rectangle 的示例:

public class Rectangle implements Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public double getArea() {
        return width * height;
    }

    public double getPerimeter() {
        return 2 * (width + height);
    }
}

Rectangle 类中,通过 implements Shape 表示该类实现了 Shape 接口。并且必须实现 Shape 接口中定义的 getAreagetPerimeter 方法。

接口的继承

接口可以继承其他接口,用 extends 关键字。子接口继承了父接口的所有方法,并可以进一步扩展方法。

下面是一个继承了 Shape 接口的子接口 Resizable 的定义,新增了一个方法 resize

public interface Resizable extends Shape {
    void resize(double ratio);
}

在这个子接口中,除了继承了 Shape 接口的 getAreagetPerimeter 方法,还新增了一个 resize 方法。

使用接口

在实际的代码中,我们可以通过接口来实现多态。即使用接口类型的变量来引用具体的实现类的对象,从而实现统一的调用。

下面是一个使用接口的示例:

public class Main {
    public static void main(String[] args) {
        Shape shape = new Rectangle(5, 3);
        System.out.println("Area: " + shape.getArea());
        System.out.println("Perimeter: " + shape.getPerimeter());

        Resizable resizable = (Resizable) shape;
        resizable.resize(0.5);
        System.out.println("New Area: " + shape.getArea());
        System.out.println("New Perimeter: " + shape.getPerimeter());
    }
}

在这个示例中,我们首先创建了一个 Rectangle 对象,并将其赋值给一个 Shape 类型的变量 shape。然后通过 shape 变量调用了 getAreagetPerimeter 方法。

接着,我们将 shape 强转为 Resizable 类型,并调用了 resize 方法。实际上,shape 引用的对象仍然是 Rectangle 类型,但是由于 Rectangle 类实现了 Shape 接口和 Resizable 接口,所以可以进行强