Java 接口默认和静态方法

原文:https://www.studytonight.com/java-8/java-interface-default-and-static-methods

Java 中的接口是一个用来实现抽象的概念。它只包含抽象方法,不提供任何实现,但是在 Java 8 中,通过添加默认和静态方法来改进接口。现在让我们看看什么是默认和静态方法。

默认方法

在界面内使用默认关键字声明的方法称为默认方法。这些方法是非抽象方法。添加默认方法的原因是允许开发人员向接口添加新方法,而不影响实现这些接口的类。

来看看如何在界面中声明默认方法

interface Printable{
    // Default method
     default void print() {
         System.out.println("Printing...");
     }
}

我们可以看到上面的界面包含了一个默认的 print()方法,其中包含了 body。

我们可以在一个界面中拥有任意数量的默认方法和抽象方法,看看如何?

interface Printable{
    // Default method
     default void print() {
         System.out.println("Printing...");
     }
     default void print2D() {
         System.out.println("Printing 2D...");
     }
     // Abstract methods
     void print3D();
}

示例:如何实现具有默认方法的接口

让我们举一个例子来理解具有默认方法的接口的实现。可以使用实现类对象调用默认方法。这里我们有一个可打印的接口,它包含两个默认方法和一个抽象方法。

interface Printable{
    // Default method
     default void print() {
         System.out.println("Printing...");
     }
     default void print2D() {
         System.out.println("Printing 2D...");
     }
     // Abstract methods
     void print3D();
}

public class Demo implements Printable {

    public void print3D() {
        System.out.println("Printing 3D...");
    }

    public static void main(String[] args){  

        Demo demo = new Demo();
        // Calling Default Methods
        demo.print();
        demo.print2D();
        // Calling Abstract Methods
        demo.print3D();

    }
}

印刷... 印刷 2D... 3D 打印...

静态方法

像默认方法一样,接口允许向其中添加静态方法。我们可以使用 static 关键字在接口内部定义静态方法,并用于定义实用方法。来看看如何在界面中声明静态方法

interface Printable{
    // Static method
     static void print() {
         System.out.println("Printing...");
     }
}

我们可以在接口中有任意数量的静态方法。从 Java 8 开始,接口可以包含默认的、静态的、抽象的和非抽象的方法。

示例:具有静态方法的接口

在这个例子中,我们有多个静态方法、默认方法和抽象方法。静态方法不会继承到实现类中,因此我们使用接口名称来调用它们。

interface Printable{
    // Static method
     static void print() {
         System.out.println("Printing...");
     }
     static void print2D() {
         System.out.println("Printing 2D...");
     }
     // Default Method
     default void print3D() {
         System.out.println("Printing 3D...");
     }
     // Abstract Method
     void getInfo();
}

public class Demo implements Printable {

    public void getInfo() {
        System.out.println("This is new style Java 8 Interface");
    }

    public static void main(String[] args){  

        Demo demo = new Demo();
        // Calling static Methods
        Printable.print();
        Printable.print2D();
        // Calling default method
        demo.print3D();
        // Calling Abstract Methods
        demo.getInfo();

    }

}

印刷... 印刷 2D... 3D 打印... 这是新样式的 Java 8 接口