Java中的面向?qū)ο缶幊谈拍罴笆纠?/h1>

在本指南中,您將學(xué)習(xí) Java 中的面向?qū)ο缶幊?(OOP) 概念。面向?qū)ο缶幊滔到y(tǒng) (OOP) 是基于“對象”的編程概念。面向?qū)ο缶幊痰闹饕康氖翘岣叱绦虻目勺x性、靈活性和可維護性。

面向?qū)ο缶幊虒?shù)據(jù)及其行為結(jié)合在一起,形成一個稱為對象的單一實體。這使得編程更易于理解。我們將詳細(xì)介紹 OOP 的所有特性,如繼承、多態(tài)、抽象、封裝,以確保您在理解 Java 中的 OOP 時不會遇到困難。

支持面向?qū)ο缶幊痰牧餍芯幊陶Z言有:Java、C++、Python、C#、Perl、JavaScript、Ruby、Smalltalk 等。

什么是 Java 中的 OOP 概念

OOP 概念包括以下面向?qū)ο缶幊痰母拍睿?/p>

  • 對象
  • 抽象
  • 封裝
  • 繼承
  • 多態(tài)

1. 對象

對象可以表示具有狀態(tài)和行為的實體。例如:一輛車是一個對象,它具有狀態(tài),如顏色、型號、價格,和行為,如速度、啟動、換擋、停車等。

讓我們來理解狀態(tài)和行為之間的區(qū)別。對象的狀態(tài)是一個數(shù)據(jù)項,可以用值來表示,例如車的價格、顏色,可以將它們視為編程中的變量。行為類似于類中的方法,它是一組可以共同執(zhí)行任務(wù)的動作。例如,換擋是一個行為,因為它涉及多個子任務(wù),如速度控制、離合器、換擋手柄的移動。

讓我們再看幾個對象的例子:

狀態(tài)和行為的示例

示例 1: 
類:房屋 
狀態(tài):地址、顏色、面積 
行為:開門、關(guān)門

我們來看一下如何在 Java 程序中編寫這些狀態(tài)和行為。狀態(tài)可以用實例變量表示,行為可以用類的方法表示。

class House {
    String address;
    String color;
    double area;
    void openDoor() {
        // 編寫代碼
    }
    void closeDoor() {
        // 編寫代碼
    }
}

示例 2: 
類:汽車 
狀態(tài):顏色、品牌、重量、型號 
行為:剎車、加速、減速、換擋。

注意:正如我們在上述示例中所見,對象的狀態(tài)和行為可以通過類中的變量和方法來表示。

2. 類

類可以被看作是一個可以用來創(chuàng)建多個對象的藍(lán)圖。例如,我們有一個類 Website,它有兩個數(shù)據(jù)成員。這只是一個藍(lán)圖,它不代表任何網(wǎng)站,但使用它我們可以創(chuàng)建代表網(wǎng)站的 Website 對象。在創(chuàng)建對象時,我們使用構(gòu)造函數(shù)為對象提供了獨立的屬性。

public class Website {
    // 字段 (或?qū)嵗兞?
    String webName;
    int webAge;
    // 構(gòu)造函數(shù)
    Website(String name, int age) {
        this.webName = name;
        this.webAge = age;
    }
    public static void main(String args[]) {
        // 創(chuàng)建對象
        Website obj1 = new Website("beginnersbook", 11);
        Website obj2 = new Website("google", 28);
        // 通過引用訪問對象數(shù)據(jù)
        System.out.println(obj1.webName + " " + obj1.webAge);
        System.out.println(obj2.webName + " " + obj2.webAge);
    }
}

輸出:

beginnersbook 11
google 28

3. 抽象

抽象是一個過程,您只展示“相關(guān)”數(shù)據(jù),并向用戶“隱藏”不必要的對象細(xì)節(jié)。例如,當(dāng)您登錄到您的銀行賬戶時,您輸入您的用戶 ID 和密碼并點擊登錄按鈕,點擊登錄后會發(fā)生什么,輸入數(shù)據(jù)如何發(fā)送到服務(wù)器,如何驗證,所有這些細(xì)節(jié)都被抽象化了。點擊此處了解更多:Java 中的抽象。

抽象類示例:

// 抽象類
abstract class Animal {
    // 抽象方法
    public abstract void animalSound();
}
public class Dog extends Animal {
    public void animalSound() {
        System.out.println("Woof");
    }
    public static void main(String args[]) {
        Animal obj = new Dog();
        obj.animalSound();
    }
}

輸出:

Woof

4. 封裝

封裝簡單來說就是將對象的狀態(tài)(字段)和行為(方法)綁定在一起。如果您正在創(chuàng)建類,那么您就在進行封裝。

示例

  1. 將實例變量設(shè)為私有,以防止外部直接訪問這些變量。您只能通過類的方法設(shè)置和獲取這些變量的值。
  2. 在類中使用 getter 和 setter 方法來設(shè)置和獲取字段的值。
class EmployeeCount {
    private int numOfEmployees = 0;
    public void setNoOfEmployees(int count) {
        numOfEmployees = count;
    }
    public double getNoOfEmployees() {
        return numOfEmployees;
    }
}
public class EncapsulationExample {
    public static void main(String args[]) {
        EmployeeCount obj = new EmployeeCount();
        obj.setNoOfEmployees(5613);
        System.out.println("No Of Employees: " + (int) obj.getNoOfEmployees());
    }
}

輸出:

No Of Employees: 5613

類 EncapsulationExample 使用了 EmployeeCount 類的對象,不能直接獲取員工數(shù)量。它必須通過同一個類的 setter 和 getter 方法來設(shè)置和獲取值。

封裝在 Java 編程中有什么好處?

如果您想在某個時刻更改 EmployeeCount 類的實現(xiàn)細(xì)節(jié),您可以自由進行更改,而不影響使用它的類。

5. 繼承

一個類通過繼承獲取另一個類的屬性和功能。繼承提供了代碼重用的概念,每個子類只定義它獨有的特性,其余特性可以從父類繼承。

繼承是基于現(xiàn)有類定義新類的過程,通過擴展其公共數(shù)據(jù)成員和方法,繼承允許我們重用代碼,提高 Java 應(yīng)用程序的重用性。

父類稱為基類或超類。擴展基類的子類稱為派生類或子類。

注意:繼承的最大優(yōu)勢是基類中的代碼無需在子類中重寫?;惖淖兞亢头椒ㄒ部梢栽谧宇愔惺褂谩?/p>

Java 中繼承的語法

要繼承一個類,我們使用 extends 關(guān)鍵字。這里類 A 是子類,類 B 是父類。

class A extends B {
}

一般化與專門化:為了在 OOP 中實現(xiàn)繼承的概念,首先需要識別不同類之間的相似性,以提出基類。

識別不同類之間的相似性稱為一般化。一般化是從兩個或多個類中提取共享特性,并將其組合成一個通用的超類。共享特性可以是屬性或方法。

與一般化相反,專門化指的是從現(xiàn)有類創(chuàng)建新子類。如果某些屬性或方法只適用于類的某些對象,則可以創(chuàng)建一個子類。

繼承示例

class Teacher {
    String designation = "Teacher";
    String college = "Beginnersbook";
    void does() {
        System.out.println("Teaching");
    }
}
public class MathTeacher extends Teacher {
    String mainSubject = "Maths";
    public static void main(String args[]) {
        MathTeacher obj = new MathTeacher();
        System.out.println(obj.college);
        System.out.println(obj.designation);
        System.out.println(obj.mainSubject);
        obj.does();
    }
}

輸出:

Beginnersbook
Teacher
Maths
Teaching

6. 多態(tài)

多態(tài)的字面意思是多種形態(tài)。它是指一個對象具有多種形態(tài)。例如,當(dāng)父類引用指向子類對象時,多態(tài)發(fā)生了。

我們來看一個多態(tài)的示例:

class Animal {
    public void animalSound() {
        System.out.println("Default Sound");
    }
}
public class Dog extends Animal {
    public void animalSound() {
        System.out.println("Woof");
    }
    public static void main(String args[]) {
        Animal obj = new Dog();
        obj.animalSound();
    }
}

輸出:

Woof

上面的示例說明了多態(tài)。盡管 obj 是 Animal 類型,但由于它引用了 Dog 對象,所以會調(diào)用 Dog 類的 animalSound 方法。

小結(jié)

Java 中的 OOP 概念(繼承、封裝、多態(tài)、抽象、對象和類)通過分離對象和它們的行為使編程更加結(jié)構(gòu)化和易于管理。通過本指南,您現(xiàn)在應(yīng)該對 Java 中的 OOP 特性有了深刻的理解。

 

若你想提升Java技能,可關(guān)注我們的Java培訓(xùn)課程。