第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java 8 接口里的默認方法特性

標(biāo)簽:
Java

这篇文章我们将要探讨Java 8中接口里的默认方法特性。Java8指出“默认方法使得新功能被添加到库中的接口里面,同时又能保证与这些接口老版本代码的二进制兼容性。”

这些年Java进化升级了很多,在Java库中引入的接口需要添加新的功能。在没有默认方法特性时,当你往接口中添加新方法时,接口内部所有实现的类都要历经一些修改。这将导致上千行的代码修改工作量。为了避免这点,Java 8引入了默认对象方法。亦即,如果你想要往现存的接口中添加任何功能,你只需添加默认方法特性而不会影响接口实现形式。

让我们看一些例子来更好的理解它。例如,我声明了一个具有打开和读取功能的接口“BookIterface”。接口的类需要实现打开和读取方法。

package org.smarttechie;/**
* The interface is intended to open and read. The implementors should implement the methods to open and read.
* @author Siva Prasad Rao Janapati
*
*/public interface BookInterface {/**
* The method opens the book
*/public void openTheBook();/**
* The method reads the book
*/public void readTheBook();
}

现在,我们提供上面接口的实现代码。

package org.smarttechie;/**
* The JavaBookImpl is the implementation of BookInterface
* @author Siva Prasad Rao Janapati
*
*/public class JavaBookImpl implements BookInterface {/**
* This opens the book
*/@Overridepublic void openTheBook() {
System.out.println("The Java book is opened");
}/**
* This reads the book
*/@Overridepublic void readTheBook() {
System.out.println("Reading the Java book");
 }
}

现在,我们想要给接口提供一个关闭功能。如果你直接添加关闭功能到book接口中,现存的实现类需要历经一些修改。有了默认方法特性后,我们能给book接口直接添加关闭功能。默认方法对所有实现都可用。

package org.smarttechie;/**
* The interface is intended to open and read. The implementors should implement the methods to open and read.
* @author Siva Prasad Rao Janapati
*
*/public interface BookInterface {/**
* The method opens the book
*/public void openTheBook();/**
* The method reads the book
*/public void readTheBook();/**
* The default method implementation
*/public default void closeTheBook() {
System.out.println("Closting the book");
 }
}
package org.smarttechie;/**
 * The JavaBookImpl is the implementation of BookInterface
 * @author Siva Prasad Rao Janapati
 *
 */public class JavaBookImpl implements BookInterface { /**
 * This opens the book
 */
 @Override
 public void openTheBook() {
 System.out.println("The Java book is opened");
 } /**
 * This reads the book
 */
 @Override
 public void readTheBook() {
 System.out.println("Reading the Java book");
 } public static void main (String[] args) {
 BookInterface bookInter = new JavaBookImpl(); //Call the default method declared in BookInterface
 bookInter.closeTheBook();
 JavaBookImpl book = new JavaBookImpl();
 book.closeTheBook();
 }
}

下面给出了上述调用方法的字节码。从字节码中,我们可以认为默认方法是一种“虚方法”。

如果你想,你可以重载实现类中的默认方法:

package org.smarttechie;/**
 * The JavaBookImpl is the implementation of BookInterface
 * @author Siva Prasad Rao Janapati
 *
 */public class JavaBookImpl implements BookInterface { /**
 * This opens the book
 */
 @Override
 public void openTheBook() {
 System.out.println("The Java book is opened");
 } /**
 * This reads the book
 */
 @Override
 public void readTheBook() {
 System.out.println("Reading the Java book");
 } /*
 * This closes the book
 */
 public void closeTheBook() {
 System.out.println("Closing the JAVA book");
 } public static void main (String[] args) {
 BookInterface book = new JavaBookImpl();
 book.closeTheBook();
 }
}

到这会儿,你可能有一个疑问,如果我们实现了两个具有同样默认方法签名的接口会怎样?在那种情况下,调用实现会得到下面的编译错误提示。

“用参数()和()复制名为closedTheBook的默认方法是继承于TheBookInterface和BookInterface的类型。”

package org.smarttechie;public interface TechBookInterface {/**
* The default method implementation
*/public default void closeTheBook() {
System.out.println("Closing the book");
 }
}
package org.smarttechie;/**
* The JavaBookImpl is the implementation of BookInterface
* @author Siva Prasad Rao Janapati
*
*/public class JavaBookImpl implements BookInterface, TechBookInterface {/**
* This opens the book
*/@Overridepublic void openTheBook() {
System.out.println("The Java book is opened");
}/**
* This reads the book
*/@Overridepublic void readTheBook() {
System.out.println("Reading the Java book");
}public static void main (String[] args) {
BookInterface book = new JavaBookImpl();
book.closeTheBook();
 }
}

为了避免这个编译错误,我们需要在实现类中显式地定义那个具有同样签名的方法。

package org.smarttechie;/**
* The JavaBookImpl is the implementation of BookInterface
* @author Siva Prasad Rao Janapati
*
*/public class JavaBookImpl implements BookInterface, TechBookInterface {/**
* This opens the book
*/@Overridepublic void openTheBook() {
System.out.println("The Java book is opened");
}/**
* This reads the book
*/@Overridepublic void readTheBook() {
System.out.println("Reading the Java book");
}public void closeTheBook() {
System.out.println("Closing the JAVA book");
}public static void main (String[] args) {
BookInterface book = new JavaBookImpl();
book.closeTheBook();
 }
}

更深入的了解阅读,可以参考下面的链接:

译文链接:http://www.codeceo.com/article/java-8-interface-default-method.html
英文原文:Java 8 – Default Methods in Interfaces
翻译作者:码农网 – civic5216

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消