本文仅供学习参考!
相关教程地址:
https://www.baeldung.com/java-interface-private-methods
https://www.geeksforgeeks.org/private-methods-java-9-interfaces/
https://www.runoob.com/java/java9-private-interface-methods.html
接口是定义一组方法及其签名的契约。它可以由任何类及其在该类中实现的方法进行扩展。从 Java 9 开始,可以在接口中拥有私有方法。
由于私有方法只能在定义它的接口内访问,因此您可以利用此类方法来编写您不希望被任何类或接口访问的敏感代码。
本文讨论了Java 中的私有接口方法以及如何实现它们。
Java 中的私有接口方法是什么?
在Java中,接口中的方法默认是**公共的。**这允许任何扩展此接口的类或接口调用此方法。Java 编程语言允许在接口中使用以下内容:
- 常量变量
- 抽象方法
- 默认方法
- 静态方法
- 私有方法
- 私有静态方法
私有接口方法是一种特殊类型的 Java 方法,只能在声明接口内部访问**。**这意味着扩展接口的类都不能使用该类的实例直接访问此方法。
接口方法默认是公共的。也就是说,它们可以由实现该接口的类以及同一包(或子包)中的任何其他类访问。但是,接口也可以将方法声明为私有。
私有接口方法允许您显式声明某个方法不打算被其他类、接口或对象使用。这在编写代码时非常有用,因为它可以让您保持代码库的组织性和可读性。
它还可以更轻松地确保方法的实现不依赖于其他类或对象的实现。私有接口方法对于降低复杂性和提高代码库的可读性非常有帮助。
这意味着您无法访问其定义接口之外的方法。私有接口方法甚至对其他接口也是不可见的 - 如果您希望其他类型(接口和类)可以访问接口方法,则必须将其设为public。私有接口方法不能被子类继承,也不能在子类中重写。
私有接口方法有什么好处?
以下是使用私有接口方法的一些好处:
- 代码可重用性——开发人员可以利用私有接口方法来重用声明接口内的代码;但是,您可能希望在接口的实现之间隐藏。
- 封装——程序员可以利用私有接口方法来封装您不希望在接口实现之间共享的代码。
在 Java 接口中使用私有方法的规则
以下是开发人员在 Java 应用程序中使用私有方法时应遵循的规则和最佳实践
- 私有接口中不允许使用抽象方法。私有接口方法只能在接口内部使用。
- 不可能同时拥有private和Abstract修饰符。
- 静态方法可以在静态或非静态方法内部使用。
- 不可能在私有静态方法中使用私有非静态方法。
如何在 Java 中编写私有接口方法
以下代码示例说明了如何在 Java 中创建私有接口方法:
interface TestInterface {
public abstract void abstractMethodExample();
public
default void defaultMethodExample() {
privateMethodExample();
privateStaticMethodExample();
System.out.println("在默认方法内部\n");
}
private void privateMethodExample() {
System.out.println("在私有非静态方法内部\n");
}
private static void privateStaticMethodExample() {
System.out.println("在私有静态方法内部\n");
}
}
请参阅前面的代码清单中显示的名为TestInterface的接口。私有静态和非静态方法是从名为defaultMethodExample的默认方法调用的。
名为TestClass 的类实现了该接口。请注意该类中如何实现抽象方法:
public class TestClass implements TestInterface {
@Override
public void abstractMethodExample() {
System.out.println
("Inside the implementation of an abstract method");
}
public static void main(String[] args) {
TestInterface test = new TestClass();
test.defaultMethodExample();
test.abstractMethodExample();
}
}
当您执行该程序时,将显示以下文本消息:
在私有非静态方法内部
在私有静态方法内部
在默认方法内部
抽象方法的实现内部
Java 中的私有接口方法不能是抽象的
我们知道私有接口方法不能是抽象的。让我们通过一个例子来理解和验证这一点。更新我们之前示例中TestInterface的两个私有方法的源代码,如下所示:
private abstract void privateMethodExample() {
System.out.println("在私有方法内部\n");
}
private abstract static void privateStaticMethodExample() {
System.out.println("在私有静态方法内部\n");
}
请注意,我们仅在名为TestInterface的接口的两个私有方法的方法签名中添加了抽象关键字。以下是经过这些更改后名为TestInterface的接口的完整源代码:
interface TestInterface {
public abstract void abstractMethodExample();
public
default void defaultMethodExample() {
privateMethodExample();
privateStaticMethodExample();
System.out.println("在默认方法内部\n");
}
public static void staticMethodExample() {
privateStaticMethodExample();
System.out.println("静态方法内部\n");
}
private abstract void privateMethodExample() {
System.out.println("在私有方法内部\n");
}
private abstract static void privateStaticMethodExample() {
System.out.println("在私有静态方法内部");
}
}
编译时,源代码将无法编译成功,并显示以下错误信息:
TestClass.java:17: illegal combination of modifiers: abstract and private
这证明你不能在方法签名中同时使用abstract和private关键字。
END
私有接口方法是 Java 的一项功能,允许开发人员在接口中定义私有方法(静态和非静态)。这对于定义只能从声明接口内部调用的辅助方法很有用。
除了提高接口内部代码的可重用性之外,私有接口方法还允许我们仅公开预期的方法实现。此类方法是定义它们的接口所独有的,不能从任何其他类或接口访问或继承。