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

Java 多態入門理解:從繼承到「父類引用指向子類對象」的核心邏輯

     編輯:Java 綜合教學

多態的基石:繼承

多態建立在繼承基礎之上。子類通過 extends 繼承父類的屬性與方法,甚至不聲明任何新成員也能擁有父類的所有能力。

class Father {
    String sex = "man";
    public void sport() { System.out.println("太極"); }
}
class Son extends Father {
    String sex = "small boy";
    int age = 15;
    @Override public void sport() { System.out.println("打球"); }
    public void homework() { System.out.println("do homework"); }
}

多態的核心語法:父類引用指向子類對象

Father xiaoming = new Son();

這行代碼可拆解為兩步:

  1. new Son() 在堆內存創建一個 Son 完整對象(包含父類繼承部分與子類自有部分);
  2. Father xiaoming 用父類類型引用指向該對象。

「大盒裝小盒」形象比喻

  • 子類對象 = 大盒子:裝著父類成員 + 子類自有成員(如 age、homework());
  • 父類引用 = 小盒子:只能「看到」父類定義的成員(sex、sport());
  • 關鍵規則:編譯看左邊(引用類型),運行看右邊(對象類型)。

具體訪問規則

訪問目標結果說明
xiaoming.sexFather.sex ("man")屬性無多態,編譯期綁定父類
xiaoming.sport()Son.sport() ("打球")方法有多態,運行期動態分派到子類重寫版本
xiaoming.age編譯報錯父類引用無法直接訪問子類特有屬性
xiaoming.homework()編譯報錯父類引用無法直接調用子類特有方法

如何使用子類特有成員?

需向下轉型:

if (xiaoming instanceof Son) {
    Son son = (Son) xiaoming;
    System.out.println(son.age);      // 15
    son.homework();                   // do homework
}

初學者心法

不要被「多態」這個術語嚇到。本質就是:同一個引用,指向不同子類對象時,調用同一方法呈現不同行為。掌握「編譯看左、運行看右」與「屬性靜態綁定、方法動態分派」兩條鐵律,多態就不再神秘。

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