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

歡迎訪問 生活随笔!

生活随笔

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

java

Java的接口及实例

發布時間:2023/12/20 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的接口及实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、定義

Java接口(Interface),是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

接口定義的一般形式為:

[訪問控制符]interface <接口名> {

類型標識符final 符號常量名n = 常數;

返回值類型? 方法名([參數列表]);

????? …

}

二、接口的特點

1、Java接口中的成員變量默認都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用"_"分隔)

2、Java接口中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化

3、Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法

4、接口中沒有構造方法,不能被實例化

5、一個接口不能實現(implements)另一個接口,但它可以繼承多個其它的接口

6、Java接口必須通過類來實現它的抽象方法

7、當類實現了某個Java接口時,它必須實現接口中的所有抽象方法,否則這個類必須聲明為抽象類

8、不允許創建接口的實例(實例化),但允許定義接口類型的引用變量,該引用變量引用實現了這個接口的類的實例

9、一個類只能繼承一個直接的父類,但可以實現多個接口,間接的實現了多繼承.

?

三、接口的用法

1、精簡程序結構,免除重復定義

比如,有兩個及上的的類擁有相同的方法,但是實現功能不一樣,就可以定義一個接口,將這個方法提煉出來,在需要使用該方法的類中去實現,就免除了多個類定義系統方法的麻煩。

舉例:鳥類和昆蟲類都具有飛行的功能,這個功能是相同的,但是其它功能是不同的,在程序實現的過程中,就可以定義一個接口,專門描述飛行。

下圖是分別定義鳥類和昆蟲類,其都有飛行的方法。

?

?

???????? 下圖定義了接口,其類圖如下:

?

?

實現代碼如下:

[java]?view plaincopy
  • interface???Flyanimal{?????
  • ???void?fly();??
  • }??
  • class???Insect?{?????
  • ???int??legnum=6;??
  • }??
  • class??Bird?{?????
  • ??int??legnum=2;??
  • ??void?egg(){};??
  • }??
  • class?Ant?extendsInsect?implements??Flyanimal?{??
  • ???public?void?fly(){??
  • ???????System.out.println("Ant?can??fly");??
  • ???}??
  • }??
  • classPigeon??extends?Bird?implements??Flyanimal?{??
  • ???public?void?fly(){??
  • ???????System.out.println("pigeon??can?fly");??
  • ???}??
  • ???public?void?egg(){??
  • ???????System.out.println("pigeon??can?lay??eggs?");??
  • ???}??
  • }??
  • public?classInterfaceDemo{??
  • ???public?static?void?main(String?args[]){??
  • ?????Ant?a=new?Ant();??
  • ?????a.fly();??
  • ?????System.out.println("Ant's?legs?are"+?a.legnum);??
  • ?????Pigeon?p=?new?Pigeon();??
  • ????p.fly();??
  • ?????p.egg();??
  • ??}??
  • }??
  • 程序運行結果:

    Ant can? fly

    Ant'slegs? are?6

    pigeon? can?fly

    pigeon? can?lay? eggs

    二、拓展程序功能,應對需求變化。

    ???????? 假設一個學校接待方面的程序,招待不同身份的人的食宿問題,其對應規則如下:

    身份

    宿

    學生

    食堂

    宿舍

    教師

    教師食堂

    學校公寓

    學生家長

    招待所

    招待所

    理論上,當然可以對每個不同身份的人各定義一個對應的類,并實現各自的方法,但是觀察這寫類,可以歸納出其有一個共同的模板,即“人”的“食、宿”問題。這時候,就可以發揮接口的功能了。實現代碼如下:

    [java]?view plaincopy
  • interfacePerson{??
  • ????void?eat();??
  • ????void?sleep();??
  • }??
  • ???
  • class?Studentimplements?Person{??
  • ????public?void?eat(){??
  • ???????System.out.println("學生去食堂吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("學生回寢室睡覺!");??
  • ????}??
  • }??
  • ???
  • class?Teacherimplements?Person{??
  • ????public?void?eat(){??
  • ???????System.out.println("教師去教工餐廳吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("教師回學校公寓睡覺!");??
  • ????}??
  • }??
  • ?class?Parents?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("家長去招待所飯館吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("家長回招待所睡覺!");??
  • ????}??
  • }??
  • ???
  • public?class?PersonInterface{??
  • ?????????public?static?void?main(String[]?args)??
  • ?????????{??
  • ???????????????????Person?p=new?Student();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Teacher();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Parents();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ?????????}??
  • }??
  • 程序執行結果:

    學生去食堂吃飯!

    學生回寢室睡覺!

    教師去教工餐廳吃飯!

    教師回學校公寓睡覺!

    家長去招待所飯館吃飯!

    家長回招待所睡覺!

    現在需要添加一些功能,即現在需要添加“外賓、上級領導”兩類角色,并且以后工具需要還要添加相應的身份角色的人進來,此時,只需要根據需要添加“外賓”類、“領導”類,而主類仍然可以拿來就用,無需進行更多的修改。此時就可以顯示出接口的作用了。

    在上面的程序中添加如下兩個類即可。

    [java]?view plaincopy
  • class?Foreign?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("外賓去酒店吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("外賓回酒店睡覺!");??
  • ????}??
  • }??
  • ???
  • class?Leader?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("領導去賓館吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("外賓回賓館睡覺!");??
  • ????}??
  • }??
  • 而主函數中用法仍然一樣。

    下面給出完整的代碼:

    [java]?view plaincopy
  • interfacePerson{??
  • ????void?eat();??
  • ????void?sleep();??
  • }??
  • ???
  • class?Studentimplements?Person{??
  • ????public?void?eat(){??
  • ???????System.out.println("學生去食堂吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("學生回寢室睡覺!");??
  • ????}??
  • }??
  • ???
  • class?Teacherimplements?Person{??
  • ????public?void?eat(){??
  • ???????System.out.println("教師去教工餐廳吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("教師回學校公寓睡覺!");??
  • ????}??
  • }??
  • ?class?Parents?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("家長去招待所飯館吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("家長回招待所睡覺!");??
  • ????}??
  • }??
  • class?Foreign?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("外賓去酒店吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("外賓回酒店睡覺!");??
  • ????}??
  • }??
  • ???
  • class?Leader?implements?Person{??
  • ????publicvoid?eat(){??
  • ???????System.out.println("領導去賓館吃飯!");??
  • ????}??
  • ????public?void?sleep(){??
  • ???????System.out.println("領導回賓館睡覺!");??
  • ????}??
  • }??
  • ???
  • public?class?PersonInterface{??
  • ?????????public?static?void?main(String[]?args)??
  • ?????????{??
  • ???????????????????Person?p=new?Student();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Teacher();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Parents();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Foreign();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ???????????????????p=new?Leader();??
  • ???????????????????p.eat();??
  • ???????????????????p.sleep();??
  • ?????????}??
  • }??
  • 程序執行結果:

    學生去食堂吃飯!

    學生回寢室睡覺!

    教師去教工餐廳吃飯!

    教師回學校公寓睡覺!

    家長去招待所飯館吃飯!

    家長回招待所睡覺!

    外賓去酒店吃飯!

    外賓回酒店睡覺!

    領導去賓館吃飯!

    領導回賓館睡覺!

    總結

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

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