日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java课堂】接口详解

發布時間:2023/12/8 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java课堂】接口详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、接口的概念

2、語法規則

實現接口有幾條規范需要我們注意

3、接口的使用

4、接口的特性

5、實現多個接口

6、接口間的繼承


1、接口的概念

? ? ? ? 接口顧名思義,就是我們身邊常用的行為規范。而接口在我們身邊比比皆是,就比如電腦上的USB接口。USB接口插入U盤、鼠標、鍵盤....所有符合USB協議的設備,它把我們能用到的設備插頭都統一起來,使得我們不用買大量的轉換器,方便我們使用。

總結來說:接口就是公共的行為規范,大家在實現時,只要符合規范標準,就可以通用。

在Java中,接口可以看成是:多個類的公共規范,是一種引用數據類型。

????????2、語法規則

接口的定義格式與定義類的格式基本相同,將class關鍵字換成interface即可定義接口

interface 接口名稱{//成員變量 必須要初始化public static final int a = 10;int b = 10;//抽象方法public abstract void method1();void method2();//接口的默認方法default void func()1{...}//接口靜態成員方法static void func2(){...} }

實現接口有幾條規范需要我們注意

  • 接口當中的成員變量,默認都是 public static final 修飾的
  • 接口當中的成員方法,默認都是抽象方法,public abstract 修飾的
  • 接口當中的普通成員方法,是不能有具體的實現的
  • 接口當中的普通成員方法,如果要有具體實現,必須加上default修飾【從JDK8開始,才有】
  • 接口當中可以有靜態的成員方法
  • 接口中不管是靜態的方法還是default方法,都是public修飾的
  • 書寫接口規范

  • 創建接口時,接口的命名一般以大寫字母 I 開頭。
  • 接口命名一般使用“形容詞”詞性的單詞。
  • 阿里編碼規范中約定,接口中的方法和屬性不要加任何修飾符號,保持代碼的簡潔性。
  • ????????3、接口的使用

    ?????????接口跟抽象類一樣不能直接實例化,必須要有一個“實現類”來“實現”該接口,實現接口中的所有抽象方法。而類和接口的關系是使用 implements 來關聯的

    public class 類名稱 implements 接口名稱{ // ... }

    注意:子類和父類之間是extends 繼承關系,類和接口之間是 implements 實現關系

    ? ? ? ? 當類實現了接口,那么該類就必須實現接口中所有的抽象方法,否則編譯器會報錯

    在IDEA中,有快捷鍵實現接口中的抽象方法。

    首先把鼠標觸碰implements,按下Alt+Shift+Enter 或點擊 Implement methods 就會出現所有要實現抽象方法,點擊OK即可完成

    ?此外,接口也可以應用具體實現類。【向上轉型】

    interface IShape{void draw(); }class Rect implements IShape{@Overridepublic void draw() {System.out.println("畫一個正方形");} }class Flower implements IShape{@Overridepublic void draw() {System.out.println("畫一朵花");} }public class test {public static void drawMap(IShape iShape){iShape.draw();}public static void main(String[] args) {drawMap(new Rect());drawMap(new Flower());IShape iShape = new Flower();//向上轉型} }

    ?

    ????????4、接口的特性

    1.接口類型是一種引用類型,但是不能直接new接口的對象

    ?2.接口中的每一個方法都是 public 的抽象方法,即接口中普通側成員方法會被隱式指定為 public abstract,且只能是 public abstract,其他修飾符都會報錯。

    ?3.接口中的方法一般不能在接口中實現,基本上都在實現接口的類來實現(在接口中default 修飾的方法可以具體實現)

    4.重寫接口方法時,所加訪問權限必須要大于重寫方法的訪問權限

    ? ? ? ? 如下,draw() 方法默認是public修飾。Rect類要重寫draw方法,就必須要加public,否則會報錯

    ?5.接口中可以含有變量,但是會被隱式指定為 public static final 變量

    interface IShape{double kind = 2.0;//默認被:public static final 修飾void draw();//默認public } public class test {public static void main(String[] args) {System.out.println(IShape.kind);//可以通過接口名訪問//IShape.brand = 2.0;//無法為最終變量brand 分配值} }

    ?6.接口中不能有靜態代碼塊和構造方法

    ?7.接口雖然不是類,但是接口編譯完成后字節碼文件的后綴格式也是.class

    ????????5、實現多個接口

    在Java中,一個類只能繼承一個父類,不支持多繼承,而一個類卻可以實現多個接口

    ? ? ? ? “假設有一條?魚 和一只 鳥,讓我們來寫一串代碼來實現它們的行為”。

    ???首先它們都是動物,我們都能給它們起名字,比如 “小花”、“小飛”....

    ???那我們能不能定義抽象類,來統一規范動物的特性和行為。如下

    abstract class Animal{public String name;public Animal(String name) {this.name = name;} }

    ? ? ? ? 然后同時創建一個 魚?類和一個鳥類,并繼承Animal類

    class Fish extends Animal{public Fish(String name) {super(name);} }class Bird extends Animal{public Bird(String name) {super(name);} }

    ?現在我們來思考一下,魚和鳥都有什么行為?

    魚能吃飯、能游泳

    鳥能吃飯、能飛

    他們共同的共性是吃飯,不同的特性是游泳和飛

    特性分析出來了,那我們該如何實現呢?

    思考:我們能不能在 Animal 類中寫 eating、swimming、flying這三個方法,并讓子類繼承并重寫這些方法呢?


    答:肯定是不行的,這樣雖然能讓Fish類和Bird類獲各自的行為,但是魚也獲得了‘上天’【flying】的能力,鳥也獲得了‘下海’【swimming】的能力,所以這樣做法不行。

    ?那假設我另創建一個游泳類,在類中實現游泳方法,并讓Fish繼承,大家想想這樣可以嗎?答案肯定也是不行的。

    ?Java中只能單繼承,所以這時我們要用接口來實現這一功能

    既然我們不能把 魚 和 鳥 的所有行為特性都寫到父類當中,那么我們就把他們相同的特性行為寫到父類中,然后再把他們特有的行為寫到接口中。

    所以我們可以直接定義三個接口,分別為ISwimming、IFlying、IEating。分比讓Fish類和Bird類實現,下面以Fish類實現接口為例

    此時我們可以定義三個方法來方便我們調用swmming、flying、eating等

    這些方法分別用相應的接口接收參數,并在main函數中調用?

    ?結果如下

    ?此時如果 bird 能充當 swim 方法的參數嗎?很明顯不能。因為Bird類沒有實現ISwimming接口。但是bird 和 fish 都能調用 eating 方法,這是因為 Fish 和 Bird 類都實現了IEating接口

    interface ISwimming{void swimming(); }interface IFlying{void flying(); }interface IEating{void eating(); } abstract class Animal{public String name;public Animal(String name) {this.name = name;} }class Fish extends Animal implements ISwimming,IEating{public Fish(String name) {super(name);}@Overridepublic void swimming() {System.out.println(name+"正在游泳");}@Overridepublic void eating() {System.out.println(name+"正在吃魚食");} }class Bird extends Animal implements IFlying,IEating{public Bird(String name) {super(name);}@Overridepublic void flying() {System.out.println(name+"正在飛");}@Overridepublic void eating() {System.out.println(name+"正在此鳥糧");} }public class Test {public static void swim(ISwimming iSwimming){iSwimming.swimming();}public static void fly(IFlying iFlying){iFlying.flying();}public static void eat(IEating iEating){iEating.eating();}public static void main(String[] args) {Fish fish = new Fish("小魚");swim(fish);eat(fish);Bird bird = new Bird("小鳥");fly(bird);eat(bird);} }

    ?上面代碼展示了Java 面向對象編程中最常見的用法:一個類繼承一個父類,同時實現多個接口。

    繼承表達的含義時 is-a 含義,而接口表達的含義時 具有xxxx特性

    • 魚是一種動物,能吃,能游泳
    • 鳥也是一種動物,能吃,能飛

    ?這樣設計什么好處呢?可以我們 👨?💻程序員👩?💻 時時刻刻記著多態的好處,忘記類型。有了接口之后,類的使用中就不必關注具體類型,而只關注某個類是否具有某種能力。

    ????????6、接口間的繼承

    在Java中,類和類之間是單繼承的,一個類可以實現多個接口,接口與接口之間可以多繼承。即:用接口可以達到多繼承的目的。

    接口可以繼承一個接口, 達到復用的效果. 使用 extends 關鍵字.

    interface IRunning {void run(); } interface ISwimming {void swim(); }// 兩棲的動物, 既能跑, 也能游 interface IAmphibious extends IRunning, ISwimming { }class Frog implements IAmphibious {... }

    通過接口繼承創建一個新的接口 IAmphibious 表示 "兩棲的". 此時實現接口創建的 Frog 類, 就繼續要實現 run 方法, 也需要實現 swim 方法。

    接口間的繼承相等于把多個接口合并在一起。

    總結

    以上是生活随笔為你收集整理的【Java课堂】接口详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。