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

Java 面向對象核心:類與對象、封裝繼承多態、構造方法、方法重載詳解

     編輯:Java 綜合教學

對象與類:面向對象的兩大基石

對象

一切皆對象。對象包含 屬性(靜態特征,名詞/形容詞) 與 行為(動態特征,動詞)。對象間存在關系:繼承(is-a)、關聯/組合/聚合(has-a)、依賴(use-a)。

類

類是對同類對象的 抽象描述,是創建對象的 模板。對象是類的 具體實例化。

public class 類名 {
    訪問修飾符 屬性類型 屬性名;
    訪問修飾符 返回類型 方法名(參數列表) { 方法體 }
}

訪問修飾符:封裝的基石

修飾符 類內部 同包其他類 不同包子類 不同包非子類
private ✓ ✗ ✗ ✗
default (無) ✓ ✓ ✗ ✗
protected ✓ ✓ ✓ ✗
public ✓ ✓ ✓ ✓

封裝原則:屬性 private,提供 public getter/setter 控制訪問邏輯(驗證、日志、延遲加載等)。

Getter/Setter 模式

private String name;

public String getName() { return name; }

public void setName(String name) {
    if (name != null && name.length() <= 20) { // 業務驗證
        this.name = name;
    }
}

類的實例化:new 關鍵字與構造方法

Dog dog = new Dog();           // 調用無參構造
Dog dog = new Dog("旺財", 3);    // 調用帶參構造

構造方法特征

  1. 方法名 必須與類名完全一致
  2. 無返回類型(連 void 都不寫)
  3. 對象創建時 自動調用,不可手動調用
  4. 通常 public,也可 private(單例模式)
  5. 執行順序:屬性默認初始化 → 顯式初始化/初始化塊 → 構造方法體
  6. 未定義時編譯器自動生成 無參構造;定義了帶參構造則不再自動生成無參構造

構造方法重載

public class Dog {
    private String name;
    private int age;

    public Dog() {}                          // 無參
    public Dog(String name) { this.name = name; }
    public Dog(String name, int age) {       // 全參
        this.name = name;
        this.age = age;
    }
    // this() 調用本類其他構造,必須放第一行
    public Dog(String name, int age, String color) {
        this(name, age);
        this.color = color;
    }
}

面向對象三大特性

1. 封裝

隱藏內部實現細節,僅暴露公共接口。實現手段:private 屬性 + public 方法。

2. 繼承

public class GoldenRetriever extends Dog { // 繼承 Dog
    // 擁有 Dog 所有非 private 成員
    // 可新增屬性/方法,可重寫父類方法
}
  • Java 單繼承,多層繼承形成繼承鏈
  • super 訪問父類成員,super() 調用父類構造(子類構造首行隱式調用)
  • final 修飾類/方法/變量禁止繼承/重寫/修改

3. 多態

同一接口,不同實現。父類引用指向子類對象:Animal animal = new Dog();

  • 前提:繼承/實現 + 方法重寫 + 父類引用指向子類對象
  • 編譯看左邊(父類類型),運行看右邊(子類對象)
  • 優勢:可擴展性、解耦、替換靈活

方法重載:同名不同參

定義

同一類中,方法名相同,參數列表不同(數量、類型、順序)。與返回類型、修飾符、異常無關。

判斷標準

場景 是否重載 說明
參數數量不同 ✓ print(int a) vs print(int a, int b)
參數類型不同 ✓ print(int a) vs print(String s)
參數順序不同 ✓ print(int a, String s) vs print(String s, int a)
僅返回類型不同 ✗ 編譯錯誤
僅修飾符不同 ✗ 編譯錯誤
僅異常聲明不同 ✗ 編譯錯誤

調用匹配規則

  1. 精確匹配參數類型
  2. 隱式類型提升:byte → short → int → long → float → double,char → int
  3. 自動裝箱/拆箱:int ⇄ Integer
  4. 可變參數優先級最低(作為最後兜底)
  5. 多態情況下:編譯期按引用類型綁定重載方法,運行期按對象類型綁定重寫方法

實戰代碼演示

public class Dog {
    private String name = "大黃";
    private String owner;

    public String getName() { return name; }
    public void setName(String name) {
        if (!name.equals(owner)) { this.name = name; } // 簡單邏輯演示
    }
    public void bark() { System.out.println(name + ":旺!旺!旺!"); }
}

public class Home {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("小黃");
        System.out.println("小狗名字:" + dog.getName());
        dog.bark();
    }
}

運行結果

總結與避坑指南

  1. 封裝是基石:屬性私有,方法公開,驗證在 setter 中
  2. 構造方法鏈:善用 this() 避免代碼重複,注意調用順序
  3. 重載 ≠ 重寫:重載編譯期綁定(靜態),重寫運行期綁定(動態)
  4. 多態用父類類型:聲明用接口/父類,實例化用具體實現
  5. final 善用:不可變對象、模板方法、防止濫用繼承

掌握類與對象、封裝繼承多態、構造重載機制,是寫出高內聚、低耦合、可擴展 Java 代碼的前提。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved