這篇文章主要介紹“怎么使用Java8中接口的新特性”,在日常操作中,相信很多人在怎么使用Java8中接口的新特性問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Java8中接口的新特性”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Java8中,可以為接口添加靜態方法和默認方法。
靜態方法:使用static關鍵字修飾??梢酝ㄟ^接口直接調用靜態方法,并執行其方法體
默認方法:使用default關鍵字修飾??梢酝ㄟ^類來調用
直接看代碼吧
package com.nanfeng.demo.interfacepractice.java8;
/**
* java8中的新特性
* 在接口中默認方法的權限是public,所以public也可以省略
*/
public interface CompareA {
// 接口中可以定義抽象方法
public static void method1() {
System.out.println("Java8中接口中可以定義靜態方法,通過接口來調用--1");
}
// 默認方法
public default void method2() {
System.out.println("Java8中接口中可以定義默認方法--2");
}
public default void method3() {
System.out.println("Java8中接口中可以定義默認方法--3");
}
}package com.nanfeng.demo.interfacepractice.java8;
public class CompareATest {
public static void main(String[] args) {
// 創建實現類對象
CompareAClass c = new CompareAClass();
/**
* 知識點一:接口中的靜態方法 只能通過接口來調用
* Static method may be invoked on containing interface class only
* 靜態方法只能在包含接口類時調用 */
// c.method1();
// 使用接口調用method1()方法,此時的接口有點像工具類了
CompareA.method1();
/**
* 知識點二:
* 默認方法,可以通過創建實現類的對象來調用接口中的默認方法
* 或者也可以對接口中的默認方法進行重寫
*/
c.method2();
}
}
class CompareAClass implements CompareA {
/**
* 在實現類中對接口中的默認方法進行重寫時
* 注意:不可以省略public權限修飾,否則會報錯
* 執行時,依然會調用我們重寫后的方法,符合繼承
*
*
*/
@Override
public void method2() {
System.out.println("Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略");
}
}運行結果:
Java8中接口中可以定義靜態方法,通過接口來調用
Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略--2
1、創建實現類的父類
package com.nanfeng.demo.interfacepractice.java8;
/**
* 實現類的父類
*/
public class SuperClass {
// 定義與接口中同名的方法
public void method3(){
System.out.println("實現類的父類中,出現和接口中同名同參數的方法--SuperClass");
}
}2、讓子類實現接口的同時繼承父類
package com.nanfeng.demo.interfacepractice.java8;
public class CompareATest {
public static void main(String[] args) {
// 創建實現類對象
CompareAClass c = new CompareAClass();
/**
* 知識點一:接口中的靜態方法 只能通過接口來調用
* Static method may be invoked on containing interface class only
* 靜態方法只能在包含接口類時調用 */
// c.method1();
// 使用接口調用method1()方法,此時的接口有點像工具類了
CompareA.method1();
/**
* 知識點二:
* 默認方法,可以通過創建實現類的對象來調用接口中的默認方法
* 或者也可以對接口中的默認方法進行重寫
*/
c.method2();
/**
* 知識點三:
* 父類中的方法和接口中的方法同名時應該怎么處理?
* 如果子類(或實現類)繼承的父類和實現的接口中聲明了同名同參的方法
* 那么在子類沒有重寫此方法時,默認的調用的是父類中同名同參的方法。
* -->類優先原則
*/
c.method3();
}
}
class ComepareAClass extends SuperClass implements CompareA {
/**
* 在實現類中對接口中的默認方法進行重寫時
* 注意:不可以省略public權限修飾,否則會報錯
* 執行時,依然會調用我們重寫后的方法,符合繼承
*/
@Override
public void method2() {
System.out.println("Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略");
}
}運行查看結果:
Java8中接口中可以定義靜態方法,通過接口來調用--1
Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略--2
實現類的父類中,出現和接口中同名的方法--SuperClass
實現類在沒有繼承父類的前提下,對多個接口進行實現,應該如何處理
1、創建CompareB接口,創建和CompareA接口中通同參的默認方法
注意:如果一個類同時繼承多個接口,接口中出現同名同參的默認方法時,會出現接口沖突。此時,實現類必須重寫此方法
/**
* Java接口中支持接口的多繼承
* 情況一:
* class ComepareAClass extends SuperClass implements CompareA
* CompareA接口和SuperClass父類出現同名同參的方法時,默認會調用父類中的方法,體現了類優先原則
* 情況二:
* class ComepareAClass implements CompareA, CompareB
* 在沒有繼承父類的前提下,一個類對多個接口繼承的前提下,兩個接口中定義了同名同參的默認方法,會如何執行?
* 知識點四:
* 如果一個實現類實現了多個接口,而這多個接口中定義了同名同參的默認方法,那么在實現類沒有重寫此方法的情況下,報錯
* -->會出現借口沖突
* 這就必須我們在實現類中重寫此方法
*
*/
class CompareAClass implements CompareA, CompareB {
/**
* 在實現類中對接口中的默認方法進行重寫時
* 注意:不可以省略public權限修飾,否則會報錯
* 執行時,依然會調用我們重寫后的方法,符合繼承
*/
@Override
public void method2() {
System.out.println("Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略--2");
}
// 解決接口沖突,必須對接口中的方法進行重寫
@Override
public void method3() {
System.out.println("ComepareAClass實現類對多個接口中的同名方法進行重寫,重寫后執行的就是實現類中的方法--method3()");
}
}運行結果:
Java8中接口中可以定義靜態方法,通過接口來調用--1
Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略--2
ComepareAClass實現類對多個接口中的同名方法進行重寫,重寫后執行的就是實現類中的方法--method3()
在子類(或實現類)中自己定義的方法中,調用接口和父類中沒有被重寫的方法
/**
* Java接口中支持接口的多繼承
* 情況一:
* class ComepareAClass extends SuperClass implements CompareA
* CompareA接口和SuperClass父類出現同名同參的方法時,默認會調用父類中的方法,體現了類優先原則
* 情況二:
* class ComepareAClass implements CompareA, CompareB
* 在沒有繼承父類的前提下,一個類對多個接口繼承的前提下,兩個接口中定義了同名同參的默認方法,會如何執行?
* 知識點四:
* 如果一個實現類實現了多個接口,而這多個接口中定義了同名同參的默認方法,那么在實現類沒有重寫此方法的情況下,報錯
* -->會出現借口沖突
* 這就必須我們在實現類中重寫此方法
* 情況三:
* class CompareAClass extends SuperClass implements CompareA, CompareB
* 一個子類(或實現類)繼承父類的同時實現多個接口
* 在子類(或實現類)中自己定義的方法中,調用接口和父類中沒有被重寫的方法
* */
class CompareAClass extends SuperClass implements CompareA, CompareB {
/**
* 在實現類中對接口中的默認方法進行重寫時
* 注意:不可以省略public權限修飾,否則會報錯
* 執行時,依然會調用我們重寫后的方法,符合繼承
*/
@Override
public void method2() {
System.out.println("Java8中實現類可以對接口中的默認方法進行重寫,注意聲明方法的權限修飾符為public,且public不可省略--2");
}
// 解決接口沖突,必須對接口中的方法進行重寫
@Override
public void method3() {
System.out.println("ComepareAClass實現類對多個接口中的同名方法進行重寫,重寫后執行的就是實現類中的方法--method3()");
}
/**
* 知識點五:如何在子類(或實現類)的方法中調用父類(或者接口中)沒有被重寫的方法
*/
public void myMethod(){
// 調用自己重寫的method3()方法
this.method3();
// 調用父類中聲明的method3()方法
super.method3();
// 調接口中的默認方法(注意:是非靜態方法,所以不可以使用接口名調用)
//調用方式:接口名.super.方法
CompareA.super.method3();
CompareB.super.method3();
}
}到此,關于“怎么使用Java8中接口的新特性”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。