7天學完Java基礎之5/7

来源:https://www.cnblogs.com/train99999/archive/2019/05/19/10887926.html
-Advertisement-
Play Games

介面 介面就是一種公共的規範標準 是一種引用數據類型 定義格式 public interface 介面名稱{} java7 中介面可以包含常量,抽象方法;Java8 還可以額外包含預設方法,靜態方法;Java 9 還可以額外包含私有方法 介面的抽象方法使用 介面使用步驟: 1. 介面不能夠直接使用, ...


介面

介面就是一種公共的規範標準 是一種引用數據類型

定義格式

public interface 介面名稱{}

java7 中介面可以包含常量,抽象方法;Java8 還可以額外包含預設方法,靜態方法;Java 9 還可以額外包含私有方法

public interface MyInterfaceAbstract{
    //這是一個抽象方法
    public abstract void methodAbs();
    //介面中的抽象方法,修飾符必須是兩個固定的關鍵字:public abstract
    //這兩個關鍵字可以選擇性的省略
    abstract void methodAbs2();
    public void methodAbs3();
    void methodAbs4();
    
}

介面的抽象方法使用

介面使用步驟:

  1. 介面不能夠直接使用,必須有一個“實現類”來實現該介面

    格式:

    public class 實現類名稱 implements 介面名稱{}

  2. 介面的實現類必須覆蓋重寫介面中所有的抽象方法
  3. 創建實現類對象(new),進行使用

//按照定義格式定義一個介面
//public interface 介面名稱{}
public interface InterfaceDemo {
    //介面裡面可以有抽象方法,普通方法
    //定義一個抽象方法
    public abstract void methodAbs1();
    //預設方法
    public abstract void methodAbs2();

}
public class InterfaceDemoImpl implements InterfaceDemo{
    //回顧一些重寫的概念
    //方法名和形參列表一樣
    //許可權修飾符必須大於或者等於父類的許可權修飾符
    //子類的返回值類型必須小於或者等於父類的返回值類型
    @Override
    public void methodAbs1() {
        System.out.println("天下武功,唯快不破");
    }

    @Override

    public void methodAbs2() {
        System.out.println("認真的人,自帶光芒");
    }

}
public class newInterfaceDemo {
    public static void main(String[] args){
        InterfaceDemoImpl inter = new InterfaceDemoImpl();
        inter.methodAbs1();
        inter.methodAbs2();
    }
}
註意事項

如果實現類並沒有覆蓋重寫介面中的所有的抽象方法,那麼這個實現類就必須是抽象類

介面的預設方法定義
public interface InterfaceDemo {
    /*
    java 8開始,介面允許定義預設方法
    格式:
    public default 返回值類型 方法名稱(參數列表){
    方法體
    }
    備註:介面當中的預設方法,可以解決介面升級的問題
    預設方法可以有方法體
     */
    public abstract void methodAbs1();

    public default void methodAbs2(){
        System.out.println("我是預設方法,可以解決升級問題");
    }
public class InterfaceDemoImpl implements InterfaceDemo{
    @Override
    public void methodAbs1() {
        System.out.println("天下武功,唯快不破");
    }
    //我在這裡並沒有重寫public default void methodAbs2()
    //實現介面自動繼承方法
}
public class newInterfaceDemo {
    public static void main(String[] args){
        InterfaceDemoImpl inter = new InterfaceDemoImpl();
        //介面的預設方法也是可以覆蓋重寫的
        //這裡就不寫了
        inter.methodAbs1();
        inter.methodAbs2();
    }
}
介面的靜態方法的定義
/*
格式
public static 返回值類型 方法名稱(參數列表){}

 */
public interface InterfaceStatic {
    public static void method1(int a,int b){
        System.out.println("今天要敲"+a*b+"行代碼");
    }
}
public class InterfaceStaticImpl {
    //介面中的靜態方法的使用
    public static void main(String[] args) {
        //直接通過介面名稱.靜態方法的名稱調用即可
        InterfaceStatic.method1(15,67);
    }
}
介面的私有方法定義
/*
問題描述:
我們需要抽取一個共有方法,用來解決兩個預設方法之間重覆代碼的問題
但是這個共有方法,不應該被是實現類使用,應該私有化的

解決方案
從Java 9 開始,介面當中允許定義私有方法
1.普通私有方法,解決多個預設方法之間重覆代碼問題
格式
private 返回值類型 方法名稱(參數列表){}
2.靜態私有方法,解決多個靜態方法之間重覆代碼問題
    格式:
    private static 返回值類型 方法名稱(參數列表){}
 */
    public interface InterfaceStatic {
        public default void method1(){
            System.out.println("認真的人,自帶光芒");
            method3();
        }
        public default void method2(){
            System.out.println("作日的最佳表現,是今日的最低要求");
            method3();
        }
        private void method3(){
            System.out.println("乘風破浪會有時,直掛雲帆濟滄海");
        }
}
public class InterfaceStaticImpl implements InterfaceStatic{
    public static void main(String[] args) {
        InterfaceStaticImpl inter = new InterfaceStaticImpl();
        inter.method1();
        inter.method2();
        //介面中的靜態方法的使用
        //想要使用介面的方法,必須要實現介面
        //實現完介面後,需要new對象使用
    }

}
介面的常量定義和使用

1.介面當中的常量,可以省略public static final ,註意,不寫也照樣是這樣

  1. 介面當中的常量,必須進行複製,不賦值不能使用

  2. 介面當中的常量名稱,使用完全大寫的字母,用下劃線進行分割

使用格式

介面名稱.常量名稱

多態

多態的前提:extends繼承或者Implements實現,

一個對象擁有多種形態,這就是:對象的多態性

代碼當中體現多態性:父類引用指向子類對象

多態格式

父類名稱 對象名 = new 子類名稱();

或者

介面名稱 對象名= new 實現類名稱();

多態中成員變數的使用特點

//訪問成員變數的兩種方式
//1.直接通過對象名稱訪問成員變數:看等號左邊是誰,優先用誰,沒有向上找
//2.間接通過成員方法訪問
public class Fu {
    //子類也有相同的成員變數num
    int num = 10;

    public void shownum(){
        System.out.println(num);
    }
}
public class Zi extends Fu{
    //與父類相同的成員變數num
    int num = 20;
    //子類特有的成員變數
    int num1 =30;
    //重寫方法
    @Override
    //重寫了父類的方法,
    public void shownum(){
        System.out.println(num);
    }
}
public class Demo01MultiField {
    public static void main(String[] args) {
        //使用多態的寫法,父類引用指向子類對象
        Fu obj  = new Zi();
        //等號左邊是Fu,優先使用左邊的的成員變數,沒有則向上找
        System.out.println(obj.num);//10
        //不可能向下找
        //System.out.println(obj.num1);編譯報錯

        //shownum屬於Fu,則使用Fu的成員變數//10
        //當子類覆蓋重寫父類,就屬於Zi類//20
        obj.shownum();
    }
}

多態中成員方法的使用特點

public class Fu {
    //成員方法的訪問規則
    //看new的是誰,就優先用誰,沒有則向上找
    public void method(){
        System.out.println("我是父類");
    }
    public void methodFu(){
        System.out.println("我是父類特有方法");
    }
}
public class Zi extends Fu{
    public void method(){
        System.out.println("我是子類");
    }
    public void methodZi(){
        System.out.println("我是子類特有方法");
    }
}

java

public class Demo01MultiField {
    public static void main(String[] args) {
       Fu obj  = new Zi();//多態
       obj.method();// 父子都有,new的是zi,優先用zi  //輸出結果我是子類
       obj.methodFu();//子類沒有,向上找,           //輸出結果我是父類特有方法
    }
}

多態中成員變數訪問規則和成員方法訪問規則總結

成員變數:看左邊,左邊是哪一個類就優先使用哪一個類。沒有像上找

成員方法:看右邊,new的是哪一個對象就優先使用哪一個對象的方法。沒有向上找

對象的向上轉型

  1. 對象的向上轉型,其實就是多態的寫法

    格式 父類名稱 對象名 = new 子類名稱();

    含義:右側創建一個子類對象,把他當作父類來看待使用

    Animal animal = new Cat();創建了一隻貓,當作動物看待

註意事項:向上轉型一定是安全的從小範圍(貓)轉成大範圍(動物)

對象的向下轉型

對象的向下轉型,其實是一個還原的動作

格式:子類名稱 對象名 = (子類名稱)父類對象;

含義,將父類對象,還原成本來的子類對象

Animal animal = new Cat();//本來是貓,向上轉型成為動物
Cat cat = (cat) animal;//本來是貓,已經被當成動物了,還原回來成為本來的貓向下轉型;

instanceof關鍵字進行類型判斷

格式:

對象 instanceof類名稱

這將會得到一個Boolean值結果,也就是判斷前面的對象能不能當作後面類型的實例

筆記本USB介面案例

//先確定一下筆記本電腦有什麼功能
//關機,開機,可以使用各種USB設備
//功能確定好之後寫方法
public class Computer {
    public void powerOn() {
        System.out.println("筆記本電腦開機了");
    }

    public void powerOff() {
        System.out.println("筆記本電腦關機了");
    }

    public void usbDevice(USB usb) {
        usb.open();
        if (usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.click();
        } else if (usb instanceof KeyBoard) {
            KeyBoard keyboard = (KeyBoard) usb;
            keyboard.type();
        }
        //usb.close();
    }
}
//usb設備需要設置成介面,並且有抽象方法,
//因為usb設備都有著共性的方法,和非共性的方法,我們需要把共性的方法給抽取出來
//usb設備都有開關的功能
public interface USB {
    //打開設備的功能
    public abstract void open();
    //關閉設備的功能

    public abstract void close();

}
//現在設置一個usb設備
//去實現USB介面
//實現了這個USB介面才可以在Computer類中傳遞進去,有了USB設備,滑鼠才是一個完整的電腦
//現在就去實現這個介面吧
public class Mouse implements USB {
    //必須重寫抽象方法
    @Override
    public void open() {
        System.out.println("滑鼠插入");
    }
    @Override
    public void close() {
        System.out.println("滑鼠拔出");
    }
    //滑鼠特有的方法
    public void click() {
        System.out.println("滑鼠點擊");
    }
}
//也是一個USB設備
public class KeyBoard implements USB {
    //重寫方法
    @Override
    public void open() {
        System.out.println("鍵盤插入。。。");
    }
    @Override
    public void close() {
        System.out.println("鍵盤拔出");
    }
    //鍵盤特有方法
    public void type() {
        System.out.println("鍵盤打字");
    }
}
//現在可以創建一個電腦了
public class ComputerImple {
    public static void main(String[] args) {
        //創建一個筆記本對象
        Computer computer = new Computer();
        //啟動筆記本
        computer.powerOn();
        //創建USB介面
        USB usb = new Mouse();
        //傳遞介面
        computer.usbDevice(usb);
        USB usb1 = new KeyBoard();
        computer.usbDevice(usb1);
        //關閉筆記本
        computer.powerOff();

    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 企業規模的軟體系統該如何設計呢?在開始寫代碼之前,我們需要選擇一個合適的架構,這個架構將決定軟體實施過程中的功能屬性和質量屬性。因此,瞭解軟體設計中的不同架構模式對我們的軟體設計會有較大的幫助。 什麼是架構模式?根據維基百科:架構模式是針對特定軟體架構場景常見問題的通用、可重用解決方案。架構模式類似 ...
  • 在策略模式(Strategy Pattern)中,一個類的行為或其演算法可以在運行時更改。這種類型的設計模式屬於行為型模式。 在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行演算法。 <! more 介紹 什麼是策 ...
  • 我回來啦!今天是周六,一看命令模式還有一個總結未完成,趕緊爬起來做做好。 就如上一篇所說的,如果擁有了一個遙控器,卻無法光憑按下一個按你,就同時能弄暗燈光、打開音響和電視、設置到DVD,並讓熱水器開始加溫,那麼我要這個遙控器還有什麼意義呢? 使用巨集命令 根據比較高級的想法來看,就是我們需要製造一種新 ...
  • 抽象類(abstract): 抽象類不能創建實例,它只能作為父類被繼承。抽象類是從多個具體類中抽象出來的父類,它具有更高層次的抽象。從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為其子類的模板,從而避免了子類的隨意性。 (1) 抽象方法只作聲明,而不包含實現,可以看成是沒有實現體的虛方法 ...
  • 首先,我要給對這方面感興趣的同學一個肯定的回答,Python語言目前行情是上升趨勢,並且由於的應用面比較廣,尤其是人工智慧和大數據領域,更是具有很大的發展空間 ...
  • 下麵創建一個SpringBoot入門項目: 1.pom.xml 2.代碼: ...
  • 原文地址:https://www.cnblogs.com/huangxm/p/6274645.html#undefined FTP服務的主動模式和被動模式 在開始之前,先聊一下FTP的主動模式和被動模式,兩者的區別 , 用兩張圖來表示可能會更加清晰一些: 主動模式: 主動模式工作過程: 1. 客戶端 ...
  • 最近有一個網友讓我幫他寫一個工具分析基金回撤情況,前幾天項目比較忙就直沒動手,今天晚上有點時間,研究了一下。 先把今天的研究成果分享: 要分析基金凈值回撤,首先肯定要有基金的凈值變化數據。要抓數據肯定是到天天基金網上抓,畢竟人家是專業機構。 我找了一隻個人比較喜歡的基金,易方達中小盤混合 (1100 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...