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

Java 入門教程:第六章 物件導向程式設計核心觀念與類別實作

     編輯:Java 程式設計入門

章節導讀

前幾章涵蓋基本資料類型、陣列、運算子、流程控制。本章進入物件導向程式設計核心:基本觀念、類別、物件、套件、介面,最後給出完整 Java 檔案格式。

§ 6.1 物件導向程式設計

6.1.1 物件、類別與訊息

  • 物件:變數(狀態)與方法(行為)的集合。變數構成核心,方法包圍核心隔離外部存取 → 封裝實現模組化、資訊隱藏、可移植性與安全性
  • 例:汽車物件 → 狀態:速度、油量、型號、位置;行為:加速、煞車、換檔。操作時無需知內部零件運作細節
  • 訊息傳遞:物件間互動透過訊息。包含三要素:接收者、採用方法、所需參數。執行後可能回傳資訊(如儀表顯示速度)
  • 類別:抽象同類物件共性。定義共同變數與方法。實例化類別產生物件。例:汽車類別描述所有汽車共性,建立實例產生具體汽車物件 → 程式碼重用

6.1.2 繼承

  • 子類別繼承父類別所有狀態與行為,並可新增自身特徵
  • 例:公車、計程車、貨車繼承汽車類別,擁有共同特性外各有專屬操作/用途
  • 形成類別層次,由一般至特殊逐步細化
  • 程式碼重用,複雜度線性增長而非幾何級數
  • Java 採單一繼承(C++ 支援多重繼承),降低複雜度。多重繼承透過介面實現,概念更簡單、使用更方便,不限於繼承關係

6.1.3 多型

  • 方法多載:同類別中多個同名方法,依傳入參數個數/型別決定呼叫哪個。例:繪圖類別 draw() 可接受字串、矩形、圓形等參數
  • 方法覆寫:子類別重新實作父類別方法,展現自身特徵。例:賽車類別覆寫父類別 加速() 方法提升性能。覆寫隱藏父類實作,強調子類別特殊性

§ 6.2 類別

類別為 Java 程式基本元素,封裝一類物件狀態與方法,為原型。結構:

classDeclaration {
    classBody
}

6.2.1 類別宣告

最簡形式:class className { ... }
可包含:父類別、實作介面、修飾詞 public, abstract, final(後續章節詳述)。

6.2.2 類別主體

定義所有成員變數與方法。慣例變數在方法前定義:

class className {
    memberVariableDeclarations;
    methodDeclarations;
}

範例 6.1:Point 類別

class Point {
    int x, y;
    void init(int ix, int iy) { x = ix; y = iy; }
}

成員可設定存取權限:private, protected, public, friendly(包內預設,§6.6 詳述)。
成員分實例成員與類別成員(static)(§6.7、§6.8 詳述)。

6.2.3 成員變數

最簡宣告:type variableName; 類型可為任意 Java 資料類型。同類別內變數名稱唯一,但可與方法同名(如 int x; 與 int x())。
成員變數作用域為整個類別,區別於方法內區域變數。可用修飾詞限定:

  • final:常數,如 final int CONSTANT = 50; 程式中不可修改,慣用大寫命名
  • static:類別變數(§6.7)

6.2.6 建構子

特殊方法,名稱與類別同名、無回傳型別、用於初始化新物件。每個類別皆有建構子,可多載。若未實作,JVM 提供無參數預設建構子。

範例 6.5:Point 類別雙建構子

class Point {
    int x, y;
    Point() { x = 0; y = 0; }
    Point(int x, int y) { this.x = x; this.y = y; }
}

優勢:new 配置記憶體時自動呼叫建構子,避免建立物件後每次手動呼叫初始化方法。建構子只能由 new 呼叫,同樣受存取權限限制。

6.2.7 finalize() 方法

垃圾回收前 JVM 自動呼叫,釋放系統資源(開啟檔案、socket 等)。宣告:
protected void finalize() throws Throwable

覆寫時慣用模式:

protected void finalize() throws Throwable {
    // 清理本類別資源
    super.finalize(); // 呼叫父類 finalize()
}

super 與 java.lang.Object 於 §6.4 講述。

§ 6.3 物件

類別實例化產生多個物件,透過訊息傳遞(呼叫方法改變狀態或產生行為)互動完成複雜任務。

6.3.1 物件生成:宣告、實例化、初始化

語法:type objectName = new type([paramList]);

  1. type objectName; 宣告,不分配記憶體
  2. new 分配記憶體、呼叫建構子、回傳物件參考(記憶體位址引用)
  3. 執行建構子完成初始化,多載建構子依參數決定呼叫哪個

範例:建立 Point 物件

Point p1 = new Point();        // 呼叫無參數建構子
Point p2 = new Point(5, 10);   // 呼叫帶參數建構子

p1, p2 佔用不同記憶體,值獨立,操作互不影響。
物件參考指向中間資料結構(含型別資訊與堆疊位址),實際記憶體位址不可操作 → 安全性保障。

6.3.2 物件使用:存取成員變數與呼叫方法

  • 存取變數:objectRef.variable 例:p.x = 10; 或 tx = new Point().x;
  • 呼叫方法:objectRef.methodName([params]) 例:p.move(30,20); 或 new Point().move(30,20);
  • 建議盡可能用方法呼叫而非直接存取變數,體現物件導向特性
  • 方法回傳值可合法使用:作為條件判斷、鏈式呼叫(p.newPoint().print())、存取回傳物件成員(px = p.newPoint().x)

範例 6.6:完整 Point 類別與使用示範

class Point {
    int x, y;
    String name = "a point";
    Point() { x=0; y=0; }
    Point(int x, int y, String name) { this.x=x; this.y=y; this.name=name; }
    int getX() { return x; }
    int getY() { return y; }
    void move(int newX, int newY) { x=newX; y=newY; }
    Point newPoint(String name) { return new Point(-x, -y, name); }
    boolean equal(int x, int y) { return this.x==x && this.y==y; }
    void print() { System.out.println(name + " : x = " + x + " y = " + y); }
}

public class UsingObject {
    public static void main(String args[]) {
        Point p = new Point();
        p.print();
        p.move(50,50);
        System.out.println("x = " + p.x + " y = " + p.y);
        System.out.println("x = " + p.getX() + " y = " + p.getY());
        if(p.equal(50,50)) System.out.println("I like this point!!!!");
        p.newPoint("a new point").print();
        new Point(10,15,"another new point").print();
    }
}

輸出展示物件建立、移動、直接/間接存取座標、比較、建立對稱點與新物件列印。

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