Java9 - 如何在接口中声明私有静态方法 | java9新特性

377 阅读3分钟

Java9 features - diamond operator anonymous inner class examples

在这篇博文中,通过实例了解java9接口的私有方法和静态方法。Java发布了很多版本。这篇博文是关于接口如何从公共修改器演变为私有修改器,以及抽象方法只演变为非抽象方法。

java7接口声明版本示例

在java7版本之前,接口只有constantsabstract 方法。例子是:

  • 公共静态最终变量即常量
  • 公共抽象方法--没有带方法头的实现。
public interface MyInterface {  
    public String message = "Hello";  
    public void getMessage();  
}  

在上面的接口例子中,我们定义了一个constant 和一个abstract 方法。

方法没有实现。该方法只有声明,即称为抽象。

如果你想拥有一个非抽象的方法,那么我们可以选择一个带有抽象方法的抽象类。

java8接口默认和静态方法的例子

在Java8版本中,接口引入了一些特性。

公共Default 方法和公共Static 方法可以在接口内声明。

因此,我们可以向一个接口声明以下方法。

  • 公共静态最终变量
  • 公共抽象方法
  • 公共默认方法
  • 公共静态方法

下面是一个例子

public interface MyInterface {
    public String CONSTANT = "constant";
    public void abstractMethod();
    // default method example  
    public default void defaultMethod() {
        System.out.println("defaultMethod");
    }
    // static method example  
    public static void staticMethod() {
        System.out.println("staticMethod");
    }
}
public class TestInterface implements MyInterface{
    public static void main(String[] args) {
        TestInterface t=new TestInterface();
        t.abstractMethod();
        t.defaultMethod();
        MyInterface.staticMethod();
    }
    @Override
    public void abstractMethod() {
        System.out.println("abstractMethod");
    }
}  

输出

abstractMethod  
defaultMethod  
staticMethod  

Default methods 可以被重写,并使用实现类的 。 instance 不能被重写,并使用接口名称调用。

Java9接口的私有和静态方法示例

在java9版本中,你可以在一个interfaces 中添加私有方法私有静态方法
例如,你在接口中的许多default 方法中写了一段普通的代码。冗余的代码不是一种好的设计方式。所以我们要把多余的代码移到private 方法中,以实现可重用性。然而,Private 方法允许重复使用接口中的代码。

实现类将可以访问这些private 方法和以下功能:

  • 公共静态最终变量
  • 公共抽象方法
  • 公共默认方法
  • 公共静态方法
  • 私有方法
  • 私有静态方法

下面是一个java9私有静态接口方法的例子

public interface MyInterface {
    public String CONSTANT = "constant";
    public void abstractMethod();
    // default method example  
    public default void defaultMethod() {
        privateMethod();
        privateStaticMethod();
        System.out.println("defaultMethod");
    }
    // static method example  
    public static void staticMethod() {
        System.out.println("staticMethod");
    }
    // private method example  
    private void privateMethod() {
        System.out.println("privateMethod");
    }
    // private static method example  
    private static void privateStaticMethod() {
        System.out.println("privateStaticMethod");
    }
}
public class TestInterface implements MyInterface{

    public static void main(String[] args) {
        TestInterface t=new TestInterface();
        t.abstractMethod();
        t.defaultMethod();
        MyInterface.staticMethod();
    }
    @Override
    public void abstractMethod() {
        System.out.println("abstractMethod");

    }

}  

而上述代码执行的输出结果是

abstractMethod  
privateMethod  
privateStaticMethod  
defaultMethod  
staticMethod  

修饰符'private'不允许在这里出现错误,在版本8或更低的版本中会被抛出。

私有和静态方法的接口特点

  • 这些方法有一个private 关键字来表示它们是一个私有方法
  • private 方法包括大括号内的主体
  • 抽象关键字不适用于这些方法,因为没有私有和抽象关键字适用于方法,因为两者的功能是相反的。
  • Private 方法的可访问性是在它被声明的interface
  • private Static 方法可以访问其他静态和非静态方法,即默认方法。
  • private 方法不能在 private static方法中使用。

请注意这些方法在接口中的使用。如果不正确使用,编译器会给出'exception in thread "main" java.lang.StackOverflowError'。

总结

在本教程中,通过实例学习了java7、java8和java9版本中的私有方法和静态方法。