一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8中接口的新特性使用指南

Java8中接口的新特性使用指南

2022-03-08 00:53南風Candy Java教程

接口改動一下就要修改對應的實現類,為了兼容老接口,Java8新增了默認方法和靜態方法,下面這篇文章主要給大家介紹了關于Java8中接口新特性的相關資料,需要的朋友可以參考下

前言

在Java8中接口中不再只有抽象方法,還可以有靜態方法以及默認方法,此時的接口更像是一個類。我們一起來看看如何使用吧~

Java8中,可以為接口添加靜態方法和默認方法。

靜態方法:使用static關鍵字修飾。可以通過接口直接調用靜態方法,并執行其方法體

默認方法:使用default關鍵字修飾。可以通過類來調用

直接看代碼吧

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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");
    }
}

編寫測試類ComepareTest

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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、創建實現類的父類

?
1
2
3
4
5
6
7
8
9
10
11
package com.nanfeng.demo.interfacepractice.java8;
 
/**
 * 實現類的父類
 */
public class SuperClass {
    // 定義與接口中同名的方法
    public void method3(){
        System.out.println("實現類的父類中,出現和接口中同名同參數的方法--SuperClass");
    }
}

2、讓子類實現接口的同時繼承父類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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接口中通同參的默認方法

注意:如果一個類同時繼承多個接口,接口中出現同名同參的默認方法時,會出現接口沖突。此時,實現類必須重寫此方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * 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()

情況三

在子類(或實現類)中自己定義的方法中,調用接口和父類中沒有被重寫的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
 * 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中接口新特性的文章就介紹到這了,更多相關Java8接口新特性內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Robi_Candy/article/details/121046996

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美破苞合集 magnet | 香蕉精品国产高清自在自线 | 丝瓜草莓香蕉绿巨人幸福宝 | 亚洲国产精品91 | 成人精品第一区二区三区 | 91社区在线观看精品 | 星空无限传媒视频在线观看视频 | avove全部视频在线观看 | 国产在线观看网站 | 91久久青青青国产免费 | 精品国产麻豆AV无码 | 日本在线视频网址 | nxgx欧美 | 亚洲男人的天堂网 | 欧美日韩在线观看精品 | 国产一区二区三区久久精品小说 | 久久精品一卡二卡三卡四卡视频版 | 国产精品国语自产拍在线观看 | 精品人人视屏 | fulao在线观看的 | 亚洲人成影院午夜网站 | 啊用力好大粗黑人小说 | 西施打开双腿下面好紧 | 色综合合久久天天综合绕视看 | 51午夜| 99精品视频在线观看免费 | 俄罗斯三级完整版在线观看 | 无套白浆| 色综合网天天综合色中文男男 | www.爱情岛论坛| 久久婷婷丁香五月色综合啪免费 | 国产成人99精品免费观看 | rylskyart系列视频| 国内精品中文字幕 | 5g影院天天 | 亚洲国产精品第一区二区三区 | 小鸟酱在线看 | 99视频九九精品视频在线观看 | 男人操女生 | 激情婷婷成人亚洲综合 | 精品国产免费观看一区高清 |