首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Java 第七章:復用類——繼承、多態與 Object 根類

     編輯:C++ 入門

本章圍繞「復用」展開,核心機制是繼承。所有類默認繼承 Object,因此擁有 toString()、equals()、hashCode() 等方法。

繼承與方法覆寫

  • 子類繼承父類非私有成員;
  • 覆寫方法:同名、同參數、同返回類型(或协变返回类型);
  • @Override 註解可讓編譯器檢查是否真正覆寫;
  • 調用父類版本:super.method()。

Object 類關鍵方法

  • toString():默認返回 類名@哈希碼,強烈建議覆寫輸出業務信息;
  • equals():默認比較引用地址,值類型需覆寫比較內容;
  • hashCode():配合 equals 用於哈希容器,覆寫 equals 必須覆寫 hashCode。

構造函數鏈

  • 子類構造函數首行隱式調用 super()(無參);
  • 可顯式調用 super(參數) 調用父類帶參構造;
  • 父類無無參構造時,子類必須顯式調用帶參 super。

多態與動態綁定

Class1 c1 = new Class1();
Class2 c2 = new Class2(); // 繼承 Class1
Class3 c3 = new Class3(); // 繼承 Class2
c1.fun(); c2.fun(); c3.fun(); // 調用各自覆寫版本
c1.func(); c2.func(); c3.func(); // func 未覆寫,調用父類版本

編譯時看引用類型,運行時看對象實際類型(動態綁定)。

設計原則

  • 將變化點封裝到子類,父類保持穩定抽象;
  • 「組合優於繼承」:優先考慮 has-a 而非 is-a;
  • 繼承層次不宜過深,通常 ≤ 3 層。

代碼示例

class Class1 { void fun() { print("hello1"); } void func() { print("hello11111"); } }
class Class2 extends Class1 { void fun() { print("hello2"); } }
class Class3 extends Class2 { void fun() { print("hello3"); } }

輸出:hello1, hello2, hello3, hello11111, hello11111, hello11111。

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