java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?
[Java教程]納尼,java可以在接口中實(shí)現(xiàn)非抽象方法了?
0 2016-09-17 18:00:20
納尼,接口中可以定義實(shí)例方法了?!
納尼,接口中還可以定義靜態(tài)方法了?!
沒(méi)錯(cuò),在Java8中新增了很多新的特性,其中就包括可以在接口中添加方法和變量。
首先我們來(lái)看下代碼
1 public interface SourceInterface 2 { 3 int a = 5; 4 int b = 10; 5 6 public static int add() 7 { 8 return a + b; 9 }10 11 public static void reset() 12 {13 // do sth14 }15 16 public default int f1()17 {18 return a;19 }20 21 public default void f2()22 {23 // do sth24 }25 }26 27 class learnCode28 {29 public void userInterface()30 {31 int xx = SourceLearning.add();32 SourceLearning.reset();33 SourceLearning instance = new SourceLearning()34 {35 @Override36 public void f2()37 {38 // do sth 、39 }40 };41 instance.f1();42 instance.f2();43 //int y=instance.add(); 注意這句會(huì)編譯錯(cuò)誤44 }45 }
代碼中,我們可以發(fā)現(xiàn)以下幾點(diǎn)不同:
1、在接口中,可以直接添加靜態(tài)方法。
該靜態(tài)方法作為接口的類方法,可以直接使用。不需要依托某個(gè)實(shí)現(xiàn)類。
2、在接口中,可以直接添加非抽象的實(shí)例方法。
在實(shí)例方法的申明中,需要增加default關(guān)鍵字修飾,因此這種方法也稱為默認(rèn)方法。他是接口自帶的方法。接口被實(shí)現(xiàn)后,實(shí)例可以直接使用這些默認(rèn)方法,同時(shí)如果對(duì)默認(rèn)方法需要重寫(xiě)時(shí),可以直接重寫(xiě)即可。
這兩點(diǎn)新特性相對(duì)于java8之前的版本來(lái)說(shuō),可以說(shuō)有質(zhì)的改變。
引申:
可以增加方法的接口,開(kāi)始變的更像抽象類。Java類在實(shí)現(xiàn)了多個(gè)擁有默認(rèn)方法的接口后,從側(cè)面展現(xiàn)的像是實(shí)現(xiàn)了多重繼承的影子。
注意:如果兩個(gè)接口的默認(rèn)方法出現(xiàn)重復(fù)申明,則需要在實(shí)現(xiàn)方法中重寫(xiě)該方法,否則jvm在執(zhí)行時(shí),無(wú)法確定究竟應(yīng)該使用哪個(gè)接口的同名方法。這應(yīng)該可以算是本次新引入特性的一個(gè)弊端,如果是指定使用的是某個(gè)接口中的默認(rèn)方法時(shí),可以采用1 @Override2 public void f2()3 {4 SourceLearning.super.f2();5 }
的形式
那么,java為什么要引入默認(rèn)方法呢?如果需要往接口中添加方法,直接使用抽象類即可,為什么要破壞已有的約定呢?
我認(rèn)為主要原因如下:
在面向接口的編程過(guò)程中,發(fā)現(xiàn)原有的接口中,都需要添加一個(gè)相同的方法,那么現(xiàn)在有兩種方案:
1)接口換抽象類,抽象類中添加該方法
2)接口中添加該抽象方法,在每一個(gè)接口的實(shí)現(xiàn)類中,均添加相同的實(shí)現(xiàn)方法。
無(wú)論選擇哪種方法,都需要對(duì)已有的代碼做出非常大的改動(dòng)。可是如果使用默認(rèn)方法,使對(duì)接的接口默認(rèn)就擁有某些功能的實(shí)現(xiàn),則很好的解決了假設(shè)的問(wèn)題。
本文網(wǎng)址:http://www.shaoqun.com/a/250786.html
*特別聲明:以上內(nèi)容來(lái)自于網(wǎng)絡(luò)收集,著作權(quán)屬原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們:admin@shaoqun.com。
JAVA
0
總結(jié)
以上是生活随笔為你收集整理的java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java1到100的数组_用java定义
- 下一篇: java实现二分法递归_Java递归实现