java中私有方法,Java 9 接口私有方法

Java 9 接口私有方法

Java 9已经发布,并且已经发生了很多变化。今天我们将研究接口中Java 9私有方法的变化。

目录[ 隐藏 ]

接口中的Java 9私有方法

最近的java版本中的接口发生了很多变化。几天前我写了一篇关于Java 9功能的文章。我们将在这篇文章中讨论以下部分。Java 7接口

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私有方法的变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值