抽象類和介面

来源:http://www.cnblogs.com/xuweiweiailixing/archive/2017/09/11/7501227.html
-Advertisement-
Play Games

1 抽象類 1.1 抽象類概述 在java中,一個沒有方法體的方法應該定義成抽象方法,而類中如果有抽象方法,這個類必須定義為抽象類。 示例: 1.2 抽象類的特點 方法只有聲明沒有實現的時候,該方法就是抽象方法,需要被abstract修飾,抽象方法必須定義在抽象類中。 抽象類不可以被實例化。 抽象類 ...


1 抽象類

1.1 抽象類概述

  • 在java中,一個沒有方法體的方法應該定義成抽象方法,而類中如果有抽象方法,這個類必須定義為抽象類。

 

  • 示例:
package java008;

/**
 * 2017/9/10
 * 說明:動物類
 */
public abstract class Animal {
    /**
     * 動物吃東西
     */
    public abstract  void eat();
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.print("狗吃肉");
    }
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.print("貓吃魚");
    }
}

 

1.2 抽象類的特點

  • 方法只有聲明沒有實現的時候,該方法就是抽象方法,需要被abstract修飾,抽象方法必須定義在抽象類中。
  • 抽象類不可以被實例化。
  • 抽象類必須有其子類覆蓋了全部的抽象方法,該子類才可以實例化。否則,這個子類還是抽象類。

 

1.3 抽象類的細節

  • :抽象類有構造函數嗎?
  • :有,用於子類訪問父類數據的初始化。  

 

  • :抽象類可以不定義抽象方法嗎?
  • :可以。目的就是讓該類不能創建對象,比如AWT的適配器對象。

 

  • :抽象關鍵字可以和final共存嗎?
  • :不可以。

 

  • :抽象類和一般類的異同?
    • 相同點:抽象類和一般類都是用來描述事物的,都在內部定義成員。
    • 不同點:
      • ①一般類有足夠的信息描述事物,抽象類描述事物的信息可能不足。
      • ②一般類中不能定義抽象方法,抽象類中可以定義抽象方法,也可以定義非抽象方法。
      • ③一般類可以被實例化,但是抽象類不可以被實例化。      

 

  • :抽象類一定是父類嗎?
  • :是的。

 

1.4 抽象類的練習

  •  需求:公司中的程式員有姓名,工號,薪水和工作內容。項目經理除了有姓名,工號,薪水,還有獎金,工作內容。
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public abstract class Employee {
    private String name;
    private String id;
    private double pay;

    public Employee(String name,String id,double pay){
        this.name = name;
        this.id = id;
        this.pay = pay;
    }

    public abstract void work();
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class Programmer extends Employee {

    public Programmer(String name,String id,double pay){
        super(name,id,pay);
    }

    @Override
    public void work() {
        System.out.print("寫代碼");
    }
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class Manager extends Employee {
    private double bonus;
    public Manager(String name, String id, double pay,double bonus) {
        super(name, id, pay);
        this.bonus = bonus;
    }

    @Override
    public void work() {
        System.out.print("管理");
    }
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class Test {
    public static void main(String[] args) {
        Programmer p = new Programmer("張三","30",9000);
        p.work();

        Manager m = new Manager("李四","1",15000,9000);
        m.work();
    }
}

 

2 介面

2.1 介面的定義

  •  當一個抽象類中的方法都是抽象方法的時候,這個時候就可以將抽象類以另一種形式定義和表示,就是介面interface。
  • 介面的成員:
    • 全局常量:public static final
    • 抽象方法:public abstract  

 

2.2 介面實現

package java008;

/**
 * 2017/9/10
 * 說明:
 */
public interface interfaceDemo {
    public void show();
    
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class interfaceDemoImpl implements interfaceDemo {
    @Override
    public void show() {
        System.out.print("介面的單實現");
    }
}
  • 類與類之間是繼承關係,類與介面之間是實現關係。
  • 介面不可以實例化,只能由實現了介面的子類並覆蓋介面中的所有抽象方法後,該子類才可以被實例化,否則這個子類只能是抽象類。

 

2.3 介面的多實現

package java008;

/**
 * 2017/9/10
 * 說明:
 */
public interface interfaceDemo {
    public void show();

}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public interface InterfaceDemo2 {
    public void show2();
}
package java008;

/**
 * 2017/9/10
 * 說明:
 */
public class interfaceDemoImpl implements interfaceDemo,InterfaceDemo2 {
    @Override
    public void show() {
        System.out.print("介面的多實現:show");
    }

    @Override
    public void show2() {
        System.out.print("介面的多實現:show2");
    }
}

 

2.4  介面的細節

  •  一個類在繼承另一個類的同時,還可以實現多個介面。
  • 介面的出現避免了但繼承的局限性。
  • 類與類之間是繼承關係,類與介面之間是實現的關係,介面與介面之間是繼承的關係,而且可以多繼承。

 

2.5  介面的特點

  • 介面是對外暴露的原則
  • 介面是程式的功能擴展
  • 介面的出現降低耦合性
  • 介面可以用來多實現
  • 類與介面之間是實現關係,而且類可以繼承一個類的同時實現多個介面。
  • 介面與介面之間可以有繼承關係,而且可以多繼承。

 

2.6 介面和抽象類的區別

  •  成員區別:
    • 抽象類:變數、常量、抽象方法、普通方法
    • 介面:常量、抽象方法  
  • 關係區別:
    • 類與類:繼承,單繼承。
    • 類與介面:實現,單實現,多實現。
    • 介面與介面:繼承,單繼承,多繼承。  
  • 設計理論的區別:
    • 抽象類: 被繼承類體現的是“is a”的關係。共性功能。
    • 介面:被實現體現的是:“like a”的關係。擴展功能。  

 

2.7 介面的應用

  • 模擬筆記本 

 

  • 定義USB介面
package java008;

/**
 * 2017/9/11
 * 說明:
 */
public interface USB {
    public void open();
    public void close();
}
  • 定義U盤
package java008;

/**
 * 2017/9/11
 * 說明:
 */
public class Upan implements USB {
    @Override
    public void open() {
        System.out.print("u盤開始運行");
    }

    @Override
    public void close() {
        System.out.print("u盤結束運行");
    }
}
  • 定義筆記本
package java008;

/**
 * 2017/9/11
 * 說明:
 */
public class BookPC {
    public static void main(String[] args) {
        useUSB(new Upan());
    }


    public static void useUSB(USB u){
        u.open();
        u.close();
    }
}

 


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

-Advertisement-
Play Games
更多相關文章
  • 或許您正在使用 REST 端點(endpoint)來擺脫 Web 服務和客戶端。如果您是一名 Java 開發人員,您可能已經嘗試過 JAX-RS、Spring REST 或者兩者。但哪一個好用呢?在這篇文章中,我將介紹兩者之間的差異,使用大體相同的代碼進行對比。在之後的博文中,我將向您展示如何輕鬆地... ...
  • 測試代碼放在兩個地方纔有效果,一個是模塊開頭,一個是函數聲明語句的下一行 doctest 的概念模型 在python的官方文檔中,對doctest是這樣介紹的: doctest模塊會搜索那些看起來像是python互動式會話中的代碼片段,然後嘗試執行並驗證結果。 從名字上是否會讓你聯想到docstri... ...
  • 前面我們實現了使用PC端上位機串口發送圖像數據到VGA顯示,通過MATLAB處理的圖像數據直接是灰度圖像,後面我們在此基礎上修改,從而實現,基於FPGA的動態圖片的Sobel邊緣檢測、中值濾波、Canny運算元邊緣檢測、腐蝕和膨脹等。那麼這篇文章我們將來實現基於FPGA的Sobel邊緣檢測。 圖像邊緣 ...
  • 針對入門新手的普及,有過大型網站技術架構牛人路過,別耽誤浪費了時間,閱讀之前,請確保有一定的網路基礎,熟練使用Linux,瀏覽大概需要3 5分鐘的時間,結尾有彩蛋。 目錄 "分散式" "微服務" "負載均衡集群" "高可用集群" "彈性雲" "故障轉移" "總結" 分散式 小馬正在經營一個線上購物網 ...
  • 1.welcome dede 2.計算圓面積 ...
  • H2Engine伺服器引擎架構是輕量級的,與其說是引擎,個人覺得稱之為平臺更為合適。因為它封裝的功能非常精簡,但是提供了非常簡潔方便的擴展機制,使得可以用C++、python、lua、js、php來開發具體的伺服器功能。H2引擎的靈感來源於web伺服器Apache。 H2引擎集成了websocke... ...
  • 實踐環境: 操作系統:Windows 7(X64) Python版本:python-2.7.13.msi 使用插件:pygame-1.9.1.win32-py2.7.msi 軟體下載: 未完,待續... ...
  • 本文介紹的是我在機器學習方面的 實際經歷,想以此給大家提供些建議與思路,供各位參考。希望通過一些途徑,來提高機器學習的興趣:(1)參與打卡活動:45天機器學習實戰(2)加入專門的微信群(3)建立機器學習的Github項目倉庫 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...