JavaSE基礎知識分享(五)

ikestu小猪發表於2024-08-12

寫在前面

前面講的是物件導向中的繼承思想,下面讓我們來看看多型這部分的內容!

Java 物件導向概念概述

多型

概述:某一個事物在不同狀態下的多種狀態。

實現多型的三大前提

  1. 要有繼承關係。
  2. 要有方法的重寫。
  3. 要有父類的引用指向子類物件。

訪問成員的特點

  • 成員變數:編譯時看左,執行時看左。
  • 成員方法:編譯時看左,執行時看右。
  • 靜態成員方法:編譯時看左,執行時看左。

多型的好處

  1. 提高了程式的維護性(繼承)。
  2. 提高了程式的擴充套件性(多型)。

多型的弊端

  • 在多型的形式下,無法使用子類中特有的成員方法。
  • 解決方案:向下轉型(例如,曹操曹植的故事)。
  • 向下轉型可能會遇到的問題ClassCastException 類轉換異常,比如將 Apple 變成 Banana

抽象類

概述:用來描述現實生活中抽象的概念集合。

語法:使用 abstract 關鍵字進行修飾。

特點

  1. abstract 可以修飾類和成員方法。
  2. 一個抽象類中,既可以存在抽象方法,也可以存在具體的實現方法。
  3. 當一個類中有抽象方法時,這個類必須是抽象類。
  4. 抽象類可以繼承抽象類,可以選擇性地重寫方法。
  5. 具體的類繼承抽象類時,必須重寫所有的抽象方法。
  6. 抽象類不能例項化。
  7. 抽象類和類一樣,子類只能繼承一個父類,但可以多層繼承。

介面

概述:主要用來描述事物額外的擴充套件功能。

關鍵字interface

特點

  1. 介面中只有常量,所有的變數預設使用 public static final 修飾。
  2. 介面中只允許出現抽象方法,所有的方法預設使用 public abstract 修飾。
  3. 具體類實現介面使用 implements 關鍵字。當具體類實現介面時,必須實現介面中所有的抽象方法。
  4. 一個類可以同時實現多個不同介面。
  5. 介面與介面之間的關係是繼承關係,一個介面可以同時繼承多個介面。
  6. 介面無法例項化。

形式引數和返回值型別的對比

形式引數

  • :當看到一個類作為方法引數型別時,呼叫時需要傳遞該類及其子類物件。
  • 抽象類:當看到一個抽象類作為方法引數型別時,呼叫時需要傳遞繼承該抽象類的具體子類物件。
  • 介面:當看到一個介面作為方法引數型別時,呼叫時需要傳遞實現該介面的具體子類物件。

返回值型別

  • :當看到一個類作為方法的返回值型別時,方法內部應返回該類或該類的子類物件。
  • 抽象類:當看到一個抽象類作為方法的返回值型別時,方法內部應返回繼承該抽象類的具體子類物件。
  • 介面:當看到一個介面作為方法的返回值型別時,方法內部應返回實現了該介面的具體子類物件。

包的劃分

  • 根據功能進行劃分。
  • 根據角色進行劃分.

導包

  • 使用 import
  • import 語句在 package 和所有 class 之間寫。

許可權修飾符

許可權修飾符

許可權修飾符 同一類中 同一包子類,其他類 不同包子類 不同包其他類
public
protected
預設
private

總結

  • public:都可以訪問。
  • protected:只能在子類中訪問。
  • 預設:只能在包內訪問。
  • private:只能在類中訪問。

內部類

成員內部類

  • 概述:將類定義在另一個類的成員位置上。
  • 形式
    • 形式 1:沒有使用 staticprivate 關鍵字修飾。
      外部類名.內部類名 物件名 = new 外部類名().new 內部類名();
      
    • 形式 2:使用 static 關鍵字修飾。
      外部類名.內部類名 物件名 = new 外部類名.內部類名();
      
    • 形式 3:使用 private 關鍵字修飾。
      • 只能在類中使用,外界無法訪問。

區域性內部類

  • 概述:將類定義在方法內部。
  • 特點
    1. 只能在方法內部使用。
    2. 方法定義的區域性變數在區域性內部類中預設是 final,不能修改。

匿名內部類

  • 語法定義格式
    new 抽象類/介面/類() {
      // 重寫方法
    };
    

相關文章