首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 類別進階特性:繼承、多型、介面、轉型與特殊參考

     編輯:Java 相關知識

Java 類別進階機制深度解析

繼承、多型、介面是 Java 物件導向的三大支柱。本文系統整理類別繼承機制、方法覆寫、介面契約、型別轉型規則,以及 this、super、null 三大特殊參考的運作原理。

1. 繼承:extends 關鍵字

  • 子類別繼承父類別 non-private 欄位與方法。
  • 單一繼承:一個類別只能 extends 一個父類別。
  • 所有類別隱含繼承 java.lang.Object。
import shapes.Rectangle;
public class FilledRect extends Rectangle {
    // 自動擁有 width、height、getArea() 等
}

2. 方法覆寫與多型

  • 覆寫:子類別提供相同簽名的方法實作,取代父類別行為。
  • @Override 註解:編譯期驗證確實覆寫,防拼字錯誤。
  • final 方法:禁止覆寫。
  • 動態繫結:執行期依物件實際型別決定呼叫哪個版本。
@Override
public void drawRect() {
    for (int i = height; i > 0; i--)
        System.out.println(makeString('#', width)); // 使用 StringBuilder 優化
}

private String makeString(char ch, int n) {
    StringBuilder sb = new StringBuilder(n);
    for (int i = 0; i < n; i++) sb.append(ch);
    return sb.toString();
}

注意:子類別建構子必須呼叫 super(...) 初始化父類別狀態。

3. 介面:契約導向設計

  • 介面方法預設 public abstract(Java 8+ 可有 default/static 實作)。
  • 介面欄位隱含 public static final。
  • 多重實作:一個類別可 implements 多個介面。
public interface Shape {
    void draw(); // 抽象方法
    default void info() { System.out.println("Shape"); } // Java 8+ 預設實作
}

public class Circle implements Shape {
    public void draw() { /* 繪製圓形 */ }
}

4. 型別轉型規則

轉型方向語法檢查時機風險
向上轉型Parent p = new Child();編譯期自動安全,無資訊遺失
向下轉型Child c = (Child) p;執行期檢查可能拋 ClassCastException
同層級轉型不可直接轉換—編譯錯誤

安全模式:if (obj instanceof Child) { Child c = (Child) obj; }(Java 16+ 支援 pattern matching:if (obj instanceof Child c))

5. 三大特殊參考

參考意義用途
null不指向任何物件初始化參考、表示缺失值、方法參數允許空值
this指向目前物件實例區分同名欄位/參數、傳遞自身參考、建構子鏈結
super指向父類別實例部分呼叫父建構子 super(...)、存取被遮蔽的父類別成員

6. 設計原則總結

  1. 組合優於繼承:靈活性更高,避免脆弱基底類別問題。
  2. 介面隔離:依賴抽象而非具體類別。
  3. 里氏替換原則:子類別必須能替換父類別而不破壞正確性。
  4. 慎用向下轉型:多用多型設計,減少 instanceof。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved