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

歡迎訪問 生活随笔!

生活随笔

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

java

【Java】6.6 Java 8 改进的结构

發布時間:2025/3/20 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】6.6 Java 8 改进的结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

接口的概念

Java 8?中接口的定義

接口的繼承

使用接口

接口和抽象類


接口的概念

接口的作用是非常豐富的,接口往往與設計模式接口在一塊。讓規范和實現相分離,讓軟件的各組件之間面向接口耦合。

接口的概念: -? 可以認為接口是一種“徹底”的抽象類

接口:是從多個相似的類中抽取出來的一種規范。接口體現的是規范

接口的體現:通信規范

?

Java 8?中接口的定義

接口定義的語法

[修飾符] interface 接口名 extends 父接口1,父接口2,……{// 0 ~ N 個 Field 定義// 0 ~ N 個 抽象方法// 0 ~ N 個 內部類、內部接口、內部枚舉定義}

修飾符:public或省略

接口名:多個單詞拼接而成,且每個單詞的首字母大寫。推薦接口用“形容詞”。

? ? ? ? ? ? (因為C#推薦接口名以I開頭,Java程序員沿用了這種方法)

【注意】

  • 接口不能有構造器,也不能有初始化
  • 接口里的Field默認有三種修飾符:public? ? static? ?final(不論程序員寫或者不寫,他都存在)
  • 接口里的方法默認有兩個:public? ?abstract(不論程序員寫或者不寫,他都存在)
  • 接口里的內部類、內部接口、內部枚舉,默認也有2個修飾符:public?static(不論程序員寫或者不寫,他都存在)
  • 一個接口可以有N個直接父類接口
  • Java 8允許在接口中設置默認方法,但默認方法一定要 default 修飾,另外該方法不能用 static 修飾;而類方法只能有static修飾,該方法不能由default修飾。
  • Output.java

    public interface Output {//接口里定義的成員變量均為常量int MAX_CACHE_LINE = 50 ;//以上相當于public static final int MAX_CACHE_LINE = 50 ;//往接口里定義抽象方法,且抽象方法只能用public修飾void out();void getData(String msg);//在接口中定義默認方法,需要使用default修飾default void print(String... msgs) {for(String msg:msgs) {System.out.println(msg);}}default void test() {System.out.println("默認的test()方法");}//在接口中定義類方法,需要static修飾static String staticTest() {return "function in the static class";} }

    OutputTest.java

    public class OutputFieldTest {public static void main(String[] args) {//訪問另一個包中的Output接口中飛MAX_CACHE_LINESystem.out.println(Output.MAX_CACHE_LINE);//在這里給MAX_CACHE_LINE重新賦值會出現編譯異常System.out.println(Output.staticTest());} }/* 50 function in the static class */

    接口的繼承

    一個接口可以有N個直接父接口,這是與類繼承的不同點。

    //格式 interface Ia{} interface Ib{} interface Ic extends Ia,Ib{}

    使用接口

    有了接口:

  • 接口可用于定義變量,也可用于強制類型轉換
  • 接口不能直接創建實例,但可以調用接口中的常量
  • 接口最大用途就是供其他類來實現自己(是不是很像抽象方法?)
  • implements實現一個或N個接口。(體會類的繼承和接口繼承)

    [修飾符] class 類名 extends 父類 implements 父接口1,父接口2,……{// 0 ~ N 個 Field 定義// 0 ~ N 個 抽象方法// 0 ~ N 個 內部類、內部接口、內部枚舉定義}

    當一個類實現接口之后:實現類要么為接口的的所有抽象方法提供實現。否則你的實現類也只能是抽象類。接口主要實在“面向接口編程”時提供更靈活的機制。(可以吧實現接口理解為一種特殊的繼承,相當于實現類繼承了一個徹底抽象的類)

    interface Product{//這是一個接口中的抽象方法,全部是public abstract int getProduceTime()int getProduceTime(); } public class Printer implements Output,Product{private String[] printData = new String[MAX_CACHE_LINE];//用以記錄當前需要打印的作業數private int printNum = 0;//作用:打印函數public void out() {//若有作業,繼續打印while(printNum>0) {System.out.println("打印機打印"+printData[0]);//所有字符向前挪1位/** System.arraycop的API:* public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)*將指定源數組中的數組從指定位置復制到目標數組的指定位置。* */System.arraycopy(printData, 1, printData, 0, --printNum);}}//作用:判斷打印的字符串是否超過規定值public void getData(String msg) {if(printNum>=MAX_CACHE_LINE) {System.out.println("輸出隊列已滿,添加失敗");}else {//把打印數據添加到隊列里,已保存數據的數量+1printData[printNum++]=msg;}}public int getProduceTime() {return 45;}public static void main(String[] args) {//向上轉型,編譯時o是Output類型,運行時o時Printer類型Output o = new Printer();o.getData("我在加強Java的基礎學習");o.getData("學習的有點慢");//開始打印o.out();//調用Output里的print(String... msgs)方法o.print("孫悟空","豬八戒","沙和尚");//創建一個Printer對象,當成Product使用Product p = new Printer();System.out.println(p.getProduceTime());//接口不能顯式繼承任何類,但是所有接口的引用類型都是可以賦值給ObjectObject obj = p;} }/*輸出的內容:* 打印機打印我在加強Java的基礎學習打印機打印學習的有點慢孫悟空豬八戒沙和尚45* * */

    接口和抽象類

    接口對于實現者而言,規定了必須向外提供哪些服務;對調用者而言,規定了可以調用哪些服務

    【接口和抽象類的異同】

    相似

  • 都可以包含抽象方法
  • 都不能創建實例
  • 子類繼承抽象類、實現了接口,都要求實現所有的方法,否則子類也只能是抽象類
  • 區別

  • 接口里只能有抽象方法,但抽象類可以沒有抽象方法,只包含普通方法
  • 接口里不能定義靜態方法(為什么?),但抽象類中可以包含靜態方法
  • 接口里的 Field 總有總有 public?static?final ,但抽象類中的 Field 完全可以是最普通的Field
  • 接口不能包含構造器,但抽象類可以使用構造器?
  • 接口不能包含初始化塊,但抽象類可包含初始化塊
  • 接口可以有多個直接的父接口,但是抽象類只能有一個父接口
  • 總結

    以上是生活随笔為你收集整理的【Java】6.6 Java 8 改进的结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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