Java

Java 知识量:11 - 45 - 220

4.1 接口><

什么是接口- 4.1.1 -

在Java编程语言中,接口(Interface)是一种定义方法签名但不包含方法实现的蓝图。它可以被类实现(implements)或扩展(extends)。接口是一种全由抽象方法构成的类型,它是一种纯粹的抽象,不包含任何具体的实现。

接口的主要目的是定义一个行为的集合,这个集合可以被任何类实现。一旦类实现了某个接口,它就必须提供接口中所有方法的实现。这样,接口提供了一种保证类遵循某种模板(即接口定义的行为)的方式。

接口还可以用于创建多态性,也就是说,可以用相同的方式处理不同的对象。如果几个类都实现了同一个接口,那么它们就可以被视为该接口类型的实例,即使它们可能属于不同的类。这使得我们可以编写能够处理接口类型的代码,而不必关心具体的类。

在Java 8之后,接口中也可以定义默认方法和静态方法。默认方法允许在接口中提供方法的默认实现,这样实现接口的类可以选择是否覆盖这个方法。静态方法则允许在接口中定义可以在任何地方直接调用的方法。

定义接口- 4.1.2 -

接口的定义语法如下:

public interface InterfaceName {  
    // methods  
}

接口中的方法默认都是public和abstract的,不需要显式地在每个方法前面写这些关键词。

例如,定义一个接口,其中有一个方法计算面积:

public interface Shape {  
    double computeArea();  
}

然后,可以创建类(例如,Circle和Rectangle)来实现这个接口:

public class Circle implements Shape {  
    private double radius;  
  
    public Circle(double radius) {  
        this.radius = radius;  
    }  
  
    @Override  
    public double computeArea() {  
        return Math.PI * Math.pow(radius, 2);  
    }  
}  
  
public class Rectangle implements Shape {  
    private double width;  
    private double height;  
  
    public Rectangle(double width, double height) {  
        this.width = width;  
        this.height = height;  
    }  
  
    @Override  
    public double computeArea() {  
        return width * height;  
    }  
}

这样,Circle和Rectangle类都必须实现computeArea方法。这就是接口的主要用途:定义一个类应该具有哪些方法,而不关心这些方法的具体实现。

扩展接口- 4.1.3 -

如果想扩展一个接口,可以在已有的接口中添加新的方法签名,这就是接口的扩展。例如:

interface MyInterface {  
    void method1();  
}  
  
// 扩展MyInterface接口  
interface ExtendedInterface extends MyInterface {  
    void method2();  
}

在上述例子中,ExtendedInterface接口扩展了MyInterface接口,这意味着任何实现ExtendedInterface的类必须同时实现method1和method2。

Java 8以后,还可以在接口中添加默认方法和静态方法,例如:

interface MyInterface {  
    void method1();  
      
    default void defaultMethod() {  
        System.out.println("This is a default method");  
    }  
      
    static void staticMethod() {  
        System.out.println("This is a static method");  
    }  
}

在这个例子中,defaultMethod是一个默认方法,任何实现MyInterface的类可以选择是否覆盖这个方法。staticMethod是一个静态方法,可以在任何地方直接调用这个方法。

实现接口- 4.1.4 -

接口定义了一个契约或一组方法,实现接口的类必须实现这些方法。以下是如何在Java中实现接口的一个例子:

1、首先,定义一个接口。在这个例子中,定义一个名为 Animal 的接口,它有一个 makeSound 方法:

public interface Animal {  
    void makeSound();  
}

2、然后,创建一个实现该接口的类。在这个例子中,创建一个名为 Dog 的类:

public class Dog implements Animal {  
    @Override  
    public void makeSound() {  
        System.out.println("Woof!");  
    }  
}

在这个例子中,Dog 类实现了 Animal 接口,因此它必须提供 makeSound 方法的实现。

3、在主程序中使用这个接口和类:

public class Main {  
    public static void main(String[] args) {  
        Animal myDog = new Dog();  
        myDog.makeSound();  // Outputs "Woof!"  
    }  
}

在这个主程序中,创建了一个 Dog 对象,并将它赋值给一个 Animal 类型的变量。然后,调用 makeSound 方法,这将输出 "Woof!"。