Java 接口怎么定义私有方法?

文章导读
Previous Quiz Next Java 9 引入了私有方法和静态私有接口方法。作为私有方法,这类方法无法通过实现类或子接口访问。这些方法被引入是为了实现封装,将某些方法的实现仅保留在接口中。这有助于减少重复代码、提高可维护性,并编写更干净的代码。
📋 目录
  1. A Java 8 之前的接口
  2. B Java 8 中接口的默认方法
  3. C Java 9 中接口的私有方法
  4. D Java 9 中接口的私有静态方法
A A

Java - 接口私有方法



Previous
Quiz
Next

Java 9 引入了私有方法和静态私有接口方法。作为私有方法,这类方法无法通过实现类或子接口访问。这些方法被引入是为了实现封装,将某些方法的实现仅保留在接口中。这有助于减少重复代码、提高可维护性,并编写更干净的代码。

Java 8 之前的接口

在 Java 8 之前,interface 只能拥有抽象方法和常量变量。因此,实现类必须实现这些方法。请看下面的示例。

示例

package com.;

interface util {
   public int sum(int a, int b);
}

public class Tester implements util {
   public static void main(String[] args) {
      Tester tester = new Tester();
      System.out.println(tester.sum(2, 3));
   }

   @Override
   public int sum(int a, int b) {		  
      return a + b;
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

5

在上面的示例中,我们可以看到实现类必须实现该方法,因为它实现了 interface。

Java 8 中接口的默认方法

从 Java 8 开始,引入了默认方法,我们可以为方法提供默认实现,实现类无需再实现该方法。此特性是为了支持 lambda 表达式,使得现有的 collection framework 可以与新引入的 functional interfaces 配合工作,而无需实现接口的所有方法。这避免了重写 collection framework。请看下面的示例:

示例

package com.;

interface util {
   public default int sum(int a, int b) {
      return a + b;
   }
}

public class Tester implements util {
   public static void main(String[] args) {
      Tester tester = new Tester();
      System.out.println(tester.sum(2, 3));
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

5

Java 9 中接口的私有方法

从 Java 9 开始,interface 进一步增强,支持私有方法。从 Java 9 开始,我们可以在 interface 中定义私有方法以及私有静态方法。这有助于封装功能并保持方法的完整性。由于私有方法无法被继承,它们可以被 interface 的公共方法使用,如下面的示例所示:

示例

package com.;

interface util {
   public default int operate(int a, int b) {
      return sum(a, b);
   }
   private int sum(int a, int b) {
      return a + b;
   } 
}

public class Tester implements util {
   public static void main(String[] args) {
      Tester tester = new Tester();
      System.out.println(tester.operate(2, 3));
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

5

Java 9 中接口的私有静态方法

类似地,我们可以定义私有静态方法,它可以从静态方法和非静态方法中调用。请看下面的示例:

示例

package com.;

interface util {
   public default int operate(int a, int b) {
      return sum(a, b);
   }
   private static int sum(int a, int b) {
      return a + b;
   } 
}

public class Tester implements util {
   public static void main(String[] args) {
      Tester tester = new Tester();
      System.out.println(tester.operate(2, 3));
   }
}

输出

让我们编译并运行上述程序,这将产生以下结果 −

5

私有静态方法无法调用 interface 中的非静态方法,并且无法在 interface 外部访问。即使是实现类也无法访问私有静态方法。