Java 9 接口私有方法
Java 9已经发布,并且已经发生了很多变化。今天我们将研究接口中Java 9私有方法的变化。
目录[ 隐藏 ]
接口中的Java 9私有方法
最近的java版本中的接口发生了很多变化。几天前我写了一篇关于Java 9功能的文章。我们将在这篇文章中讨论以下部分。
Java 7接口
Java 8接口更改
Java 9接口更改
在接口中定义私有方法的规则?
为什么我们需要在接口中使用私有方法?
面试问题和答案
在这篇文章中,我提供了伪代码只是为了理解这个新功能,因为每个人都知道java中的接口是什么,Java中的私有方法是什么。
Java 7接口
在Java SE 7或更早版本中,接口只能有两种东西。
常数变量
抽象方法
我们无法在接口中提供方法实现。如果我们想要提供抽象方法和非抽象方法(方法与实现)的组合,我们只需要去抽象类。
public interface DBLogging{ String MONGO_DB_NAME = "ABC_Mongo_Datastore"; String NEO4J_DB_NAME = "ABC_Neo4J_Datastore"; String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore"; void logInfo(String message); void logWarn(String message); void logError(String message); void logFatal(String message); }
这里我们定义了几个常量和公共抽象方法。如果我想在这里为这些方法提供一些实现,比如默认实现,该怎么办?然后我们应该在Java 7或更早版本中使用抽象类。
Java 8接口更改
Oracle Corporation 在Java 8 Release中引入了一些新的接口功能。这是默认方法和静态方法功能。
是的,我们可以从Java 8开始在Interface中编写方法实现。我们需要使用default
关键字来定义它们,如下所示。
在Java 8中,一个接口只能有四种东西:
常数变量
抽象方法
默认方法
静态方法
在Java 8界面更改中添加了默认和静态方法。
public interface DBLogging{ String MONGO_DB_NAME = "ABC_Mongo_Datastore"; String NEO4J_DB_NAME = "ABC_Neo4J_Datastore"; String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore"; // abstract method example void logInfo(String message); // default method example default void logWarn(String message){ // Step 1: Connect to DataStore // Step 2: Log Warn Message // Step 3: Close the DataStore connection } default void logError(String message){ // Step 1: Connect to DataStore // Step 2: Log Error Message // Step 3: Close the DataStore connection } default void logFatal(String message){ // Step 1: Connect to DataStore // Step 2: Log Fatal Message // Step 3: Close the DataStore connection } // static method example static boolean isNull(String str) { System.out.println("Interface Null Check"); return str == null ? true : "".equals(str) ? true : false; } // Any other abstract, default, static methods }
上面的示例显示了我们可以在Java 8接口中执行的所有操作,请注意一组额外的默认和静态方法。
您是否注意到所有日志方法中的代码冗余?每种方法都是自己打开和关闭连接。如果我们想要代码重用,那么我们将不得不将这些公共代码移动到公共方法,但随后它将被所有其他类访问。
如果我们想重用代码但又不想将其暴露给其他人,该怎么办?我们将不得不使用私有方法为公共代码进行抽象类。
Java 9接口更改
为了解决上述场景,Oracle Corporation在java 9发行版的接口中引入了私有方法。
从Java 9开始,我们可以使用private
访问修饰符在接口中编写私有方法,如下所示(与其他私有方法一样)。
在Java 9及更高版本中,接口可以有六种类型:
常数变量
抽象方法
默认方法
静态方法
私人方法
私有静态方法
Java 9接口更改中添加了私有方法和私有静态方法。
public interface DBLogging { String MONGO_DB_NAME = "ABC_Mongo_Datastore"; String NEO4J_DB_NAME = "ABC_Neo4J_Datastore"; String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore"; default void logInfo(String message) { log(message, "INFO"); } default void logWarn(String message) { log(message, "WARN"); } default void logError(String message) { log(message, "ERROR"); } default void logFatal(String message) { log(message, "FATAL"); } private void log(String message, String msgPrefix) { // Step 1: Connect to DataStore // Step 2: Log Message with Prefix and styles etc. // Step 3: Close the DataStore connection } // Any other abstract, static, default methods}
在这里,我们将冗余代码移动到一个通用的私有方法中,以便我们的API客户端无法看到它们。请注意Eclipse Oxygen支持Java 9的下图。
在接口中定义私有方法的规则?
在接口中编写私有方法时,我们应遵循以下规则:
这不是一个新规。我们不能使用私有和抽象修饰符的组合,因为它们具有不同的含义。
这就是私有方法应该完全实现的原因。
在Java中,我们知道private是最不可见的访问修饰符。所以我们无法降低它从私有到任何其他修饰符的可见性。
我们应该使用private修饰符来定义这些方法。
没有私有和抽象修饰符在一起,它会给编译器错误。
“private”方法意味着完全实现的方法,因为子类不能继承和覆盖此方法。
“抽象”方法意味着无实现方法。这里的子类应该继承并覆盖此方法。
私有方法必须包含正文。
没有比私人修饰符更少的可访问性。
这些接口私有方法仅在该接口中有用或可访问。我们无法访问或继承从接口到另一个接口或类的私有方法。
为什么我们在Interface中需要私有方法?
接口中的Java 9私有方法具有以下优点。
无需编写重复代码,因此代码可重用性更高。
我们可以选择只将我们想要的方法实现暴露给客户端。
这就是接口中Java 9私有方法的变化。
翻译&转载:https://www.journaldev.com/12850/java-9-private-methods-interfaces
共同学习,写下你的评论
评论加载中...
作者其他优质文章