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

Java 面向物件三大特性深度解析:封裝、繼承、多態與 super/override 關鍵點

     編輯:Java 綜合教學

一、封裝

核心步驟

  1. 私有化屬性:private String name;
  2. 提供公共存取器:setName() / getName() (命名規範:set/get + 屬性名首字大寫)
public void setName(String name) { this.name = name; }
public String getName() { return name; }

封裝優勢

  • 提高資料安全性 (可在 setter 加驗證邏輯)
  • 隱藏實現細節,對外暴露穩定介面
  • 框架/工具類開發基石

注意:非所有屬性都需 getter/setter,視業務需求決定 (如唯寫的密碼只需 setter)。

二、繼承

關鍵字:extends

class Student extends Person { ... }

繼承規則與限制

規則說明
單繼承一個類只能繼承一個直接父類 (多層繼承允許)
私有不繼承父類 private 成員不可被子類直接存取
建構子不繼承但子類建構子會隱式/顯式調用父類建構子
預設調用父類無參建構子子類實例化時先初始化父類狀態
跨包 default 不可見子類不同包時無法繼承父類 package-private 成員

super 關鍵字三大用法

  1. 存取父類同名成員:super.field / super.method()
  2. 調用父類建構子:super(args) (必須為建構子第一行)
  3. 區別 this:this 代表當前對象,super 代表父類引用;this() 調用本類建構子,super() 調用父類建構子;兩者不可共存。

三、方法重寫 vs 重載

重寫重載
前提存在繼承關係同一類中 (或父子類)
方法名相同相同
參數列表必須相同必須不同 (個數/型別/順序)
返回型別子類 ≤ 父類 (共變)無限制
權限修飾符子類 ≥ 父類無限制
異常子類 ≤ 父類無限制

四、多態

定義

父類引用指向子類物件:Animal a = new Dog();

存取規則 (編譯看左邊,運行看右邊)

成員類型同名情況下存取到
非靜態方法子類 (動態綁定)
靜態方法父類 (靜態綁定)
成員變數 (含靜態)父類

⚠️ 無法存取子類特有成員 (編譯器只認父類型)。需向下轉型:Dog d = (Dog) a;。

多態應用場景

  • 形式參數多態:方法接收父類型,實際傳入任意子類
  • 返回類型多態:工廠方法返回父類型,實際返回具體子類

完整代碼示範

abstract class Animal {
    String name;
    static String color = "動物色";
    public abstract void run();
    public void eat() { System.out.println("父類 eat"); }
}

class Dog extends Animal {
    static String color = "黃色";
    public void run() { System.out.println(name + " 四腳奔跑"); }
    public void eat() { System.out.println("子類 eat"); }
}

class Fish extends Animal {
    public void run() { System.out.println(name + " 游泳"); }
}

public class Demo {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.name = "小黃";
        a.run();      // 子類 run
        a.eat();      // 子類 eat
        System.out.println(a.color); // 父類 color (靜態)

        // 多態參數
        getArea(new Circle());
        getArea(new Rect());
    }
    static void getArea(Shape s) { s.calculate(); }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved