面向對象程式設計 (OOP) 是一種基于對象概念的程式設計範式。對象同時包含資料和行為,使開發人員可以輕松地以易于了解和維護的方式對現實世界的實體進行模組化。在本文中,我們将深入探讨 Java 中的 OOP,探索使其成為強大且廣泛使用的程式設計語言的基本概念和原則。
OOP 中的第一個關鍵概念是封裝,它指的是将資料和行為隐藏在一個對象中的想法。封裝允許對象控制其資料的通路和修改方式,這有助于確定資料保持一緻和安全。為了說明這個概念,讓我們考慮以下 Java 銀行帳戶示例:
public class BankAccount {
private double balance;
private String accountNumber;
public BankAccount(double balance, String accountNumber) {
this.balance = balance;
this.accountNumber = accountNumber;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
}
在這個例子中,我們建立了一個名為 BankAccount 的類,它封裝了與銀行賬戶相關的資料和行為。資料(餘額和帳号)存儲在私有變量中,我們提供了通路和修改該資料的公共方法。這使我們能夠確定資料保持一緻和安全,因為外部對象無法直接通路或修改 BankAccount 對象内的資料。
OOP 中的第二個關鍵概念是繼承,它允許我們建立繼承現有類的屬性和行為的新類。這使得重用代碼和建構現有功能變得容易,同時還可以建立更專業的類來繼承更通用類的行為。為了說明這個概念,讓我們考慮以下 Java 支票帳戶示例:
public class CheckingAccount extends BankAccount {
private double overdraftLimit;
public CheckingAccount(double balance, String accountNumber, double overdraftLimit) {
super(balance, accountNumber);
this.overdraftLimit = overdraftLimit;
}
public double getOverdraftLimit() {
return overdraftLimit;
}
public void setOverdraftLimit(double overdraftLimit) {
this.overdraftLimit = overdraftLimit;
}
}
在此示例中,我們建立了一個名為 CheckingAccount 的新類,它繼承自 BankAccount 類。這意味着 CheckingAccount 類具有 BankAccount 類的所有屬性和行為,以及我們定義的任何其他屬性和行為。在本例中,我們向 CheckingAccount 類添加了一個透支限制屬性,該屬性特定于支票賬戶。
OOP 中的第三個關鍵概念是多态性,它允許将不同類的對象視為通用類型的對象。這使得編寫能夠處理不同類型對象的通用代碼成為可能,并且使代碼更易于管理和維護。為了說明這個概念,讓我們考慮以下示例:
public interface Shape {
double getArea();
}
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}
public class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
}
public class ShapeCalculator {
public double calculateTotalArea(Shape[] shapes) {
double totalArea = 0;
for (Shape shape : shapes) {
totalArea += shape.getArea();
}
return totalArea;
}
}
在這個例子中,我們建立了一個名為 Shape 的接口,它定義了一個計算形狀面積的方法。然後我們有兩個類,Circle 和 Rectangle,它們實作了 Shape 接口。這意味着它們都被視為 Shape 類型的對象,即使它們是具有不同屬性和行為的不同類。
最後,我們建立了一個名為 ShapeCalculator 的類,它可以計算 Shape 對象數組的總面積。因為所有 Shape 對象都有一個通用的 getArea() 方法,是以 ShapeCalculator 類可以使用這個方法來計算 Circle 和 Rectangle 對象的任意組合的總面積。
總之,OOP 是一種強大的程式設計範例,它允許開發人員以易于了解和維護的方式對現實世界的實體進行模組化。通過掌握封裝、繼承和多态性的概念,Java 開發人員可以編寫更健壯、可伸縮和可維護的代碼。無論您是經驗豐富的 Java 開發人員還是剛剛起步,了解 OOP 的基礎知識都是成為成功程式員的重要一步。