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

Java 繼承與接口核心筆記:構造鏈、方法覆蓋、抽象類、Final 不可變類

     編輯:Java 綜合教學

Java 繼承與接口核心筆記:構造鏈、方法覆蓋、抽象類、Final 不可變類

一、繼承核心機制

1. 構造方法調用鏈

class Grandparent {
    public Grandparent() { System.out.println("GrandParent Created."); }
    public Grandparent(String s) { System.out.println("GrandParent Created: " + s); }
}
class Parent extends Grandparent {
    public Parent() {
        super("Hello Grandparent"); // 必須是第一行
        System.out.println("Parent Created");
    }
}
class Child extends Parent {
    public Child() { System.out.println("Child Created"); }
}
public class Test {
    public static void main(String[] args) { new Child(); }
}
// 輸出順序:
// GrandParent Created: Hello Grandparent
// Parent Created
// Child Created

規則: 子類構造器首行隱式/顯式調用父類構造器;若父類無無參構造器,子類必須顯式 super(...);初始化順序:父類靜態 → 子類靜態 → 父類實例 → 父構造器 → 子類實例 → 子構造器。

2. 方法覆蓋 vs 重載

  • 覆蓋:方法簽名完全相同(返回類型、名稱、參數列表),支持協變返回類型。
  • 重載:同名方法參數列表不同(類型、數量、順序)。
  • 子類中用 super.method() 調用被覆蓋的父類方法。

3. 覆蓋限制規則

  1. 訪問權限不能比父類更低(public > protected > default > private)。
  2. 拋出的檢查異常範圍不能大於父類。
  3. final 方法不可覆蓋(如 Object.getClass())。
  4. 靜態方法不可覆蓋(屬於類,非實例),只能隱藏。

二、Final 關鍵字與不可變類

1. Final 三大用法

  • 修飾類:不可被繼承(如 String、Integer)。
  • 修飾方法:不可被覆蓋,編譯器可內聯優化。
  • 修飾變量:基本類型值不可變;引用類型地址不可變(但對象內部狀態可變)。

2. 不可變類設計模式

public final class Address {
    private final String detail;
    private final String postCode;

    public Address(String detail, String postCode) {
        this.detail = detail;
        this.postCode = postCode;
    }
    // 僅提供 getter,無 setter
    public String getDetail() { return detail; }
    public String getPostCode() { return postCode; }

    @Override public boolean equals(Object o) { ... }
    @Override public int hashCode() { ... }
}

優勢: 線程安全、可作 Map Key/Set 元素、防禦性拷貝簡化、緩存友好。

三、抽象類

  • abstract class 可包含抽象方法(無實現)與具體方法/字段。
  • 含抽象方法的類必須聲明 abstract;抽象類不可實例化。
  • 子類必須實現所有抽象方法,否則仍為抽象類。
  • 多態經典模式:AbstractType ref = new ConcreteImpl();

四、接口

1. 核心特性

  • JDK 7 前:僅含 public static final 常量、public abstract 方法。
  • JDK 8:支持 default 默認方法、static 靜態方法。
  • JDK 9:支持 private 私有方法。
  • 一個類可 implements 多個接口,實現多重繼承效果。

2. 接口繼承與實現

interface OneInterface { void f1(); }
interface TwoInterface extends OneInterface { void f2(); }
class Impl implements TwoInterface {
    public void f1() { ... }
    public void f2() { ... }
}

實現類必須實現父接口與子接口所有抽象方法才能實例化。

3. 接口 vs 抽象類選型

五、Object 頂層父類與 toString 機制

System.out.println(obj) → PrintStream.println(Object) → String.valueOf(obj) → obj.toString()。默認返回 類名@哈希碼,建議業務類重寫 toString() 輸出有意義信息。

六、總結

繼承實現代碼復用,接口定義行為契約,抽象類介於兩者間。善用 final 構建不可變類,遵循里氏替換原則設計繼承體系,接口隔離變化點,是高內聚低耦合面向對象設計的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度抽象類接口
本質不完全的類,含狀態與行為行為契約,無狀態(JDK8前)
繼承數量單繼承多實現
構造器有無
適用場景「is-a」強關聯,共享代碼/狀態「can-do」能力擴展,跨層級復用