#include <iostream>
using namespace std;
// 定義一個 Car 類
class Car {
public:
// 屬性
string color;
int doors;
int engineCapacity;
// 方法
void start() {
cout << "Car is starting." << endl;
}
void accelerate() {
cout << "Car is accelerating." << endl;
}
void brake() {
cout << "Car is braking." << endl;
}
};
class SUV : public Car { // 繼承自 Car 類別
public:
void start() {
cout << color << " SUV with " << doors << " doors and " << engineCapacity << " cc engine is starting." << endl;
}
void accelerate() { // 覆蓋父類別的方法
cout << color << " SUV is accelerating quickly." << endl;
}
};
int main() {
// 創建一個 SUV 物件
SUV mySUV;
mySUV.color = "Red";
mySUV.doors = 4;
mySUV.engineCapacity = 3000;
// 使用 SUV 物件的方法
mySUV.start();
mySUV.accelerate();
mySUV.brake();
// 輸出 SUV 物件的屬性
cout << "Color: " << mySUV.color << endl;
cout << "Doors: " << mySUV.doors << endl;
cout << "Engine Capacity: " << mySUV.engineCapacity << " cc" << endl;
return 0;
}
C# 範例
csharp
複製程式碼
using System;
// 定義一個 Car 類
public class Car {
// 屬性
public string Color { get; set; }
public int Doors { get; set; }
public int EngineCapacity { get; set; }
// 方法
public void Start() {
Console.WriteLine("Car is starting.");
}
public void Accelerate() {
Console.WriteLine("Car is accelerating.");
}
public void Brake() {
Console.WriteLine("Car is braking.");
}
}
public class SUV : Car { // 繼承自 Car 類別
public new void Start() {
Console.WriteLine($"{Color} SUV with {Doors} doors and {EngineCapacity} cc engine is starting.");
}
public new void Accelerate() { // 覆蓋父類別的方法
Console.WriteLine($"{Color} SUV is accelerating quickly.");
}
}
public class Program {
public static void Main() {
// 創建一個 SUV 物件
SUV mySUV = new SUV();
mySUV.Color = "Red";
mySUV.Doors = 4;
mySUV.EngineCapacity = 3000;
// 使用 SUV 物件的方法
mySUV.Start();
mySUV.Accelerate();
mySUV.Brake();
// 輸出 SUV 物件的屬性
Console.WriteLine($"Color: {mySUV.Color}");
Console.WriteLine($"Doors: {mySUV.Doors}");
Console.WriteLine($"Engine Capacity: {mySUV.EngineCapacity} cc");
}
}
Java 範例
java
複製程式碼
// 定義一個 Car 類
public class Car {
// 屬性
public String color;
public int doors;
public int engineCapacity;
// 方法
public void start() {
System.out.println("Car is starting.");
}
public void accelerate() {
System.out.println("Car is accelerating.");
}
public void brake() {
System.out.println("Car is braking.");
}
public static void main(String[] args) {
// 創建一個 SUV 物件
SUV mySUV = new SUV();
mySUV.color = "Red";
mySUV.doors = 4;
mySUV.engineCapacity = 3000;
// 使用 SUV 物件的方法
mySUV.start();
mySUV.accelerate();
mySUV.brake();
// 輸出 SUV 物件的屬性
System.out.println("Color: " + mySUV.color);
System.out.println("Doors: " + mySUV.doors);
System.out.println("Engine Capacity: " + mySUV.engineCapacity + " cc");
}
}
class SUV extends Car { // 繼承自 Car 類別
@Override
public void start() {
System.out.println(color + " SUV with " + doors + " doors and " + engineCapacity + " cc engine is starting.");
}
@Override
public void accelerate() { // 覆蓋父類別的方法
System.out.println(color + " SUV is accelerating quickly.");
}
}
繪圖說明
以下是模擬一輛紅色、四門、3000 cc 的休旅車的類的結構圖:
sql
複製程式碼
+-------------------------+
| Car |
+-------------------------+
| - color: String |
| - doors: int |
| - engineCapacity: int |
+-------------------------+
| + start(): void |
| + accelerate(): void |
| + brake(): void |
+-------------------------+
^
|
|
+-------------------------+
| SUV |
+-------------------------+
| inherits from Car |
+-------------------------+
| + start(): void |
| + accelerate(): void |
+-------------------------+
解釋
屬性(Properties/Attributes):
color:車的顏色。
doors:車的門數。
engineCapacity:車的引擎容量。
方法(Methods/Operations):
start():啟動車輛。
accelerate():加速車輛。
brake():煞車車輛。
這樣的類結構圖展示了如何將屬性和方法封裝在一個類中,以實現抽象資料型態(ADT)的概念。在 C++、C# 和 Java 中,類都是用來實現這種資料抽象的基本單位。
物件導向程式設計中的三種特性
在物件導向程式設計(OOP)中,物件的三種主要特性是封裝(Encapsulation)、繼承(Inheritance)和多型(Polymorphism)。以下是這三種特性的詳細說明:
-
封裝(Encapsulation)
- 定義:將資料(屬性)與處理資料的方法(函數或方法)封裝在一起,組成一個獨立的單元(物件),並保護資料不被外界直接訪問或修改,只能通過物件的方法進行操作。
- 例子:將汽車的屬性(如顏色、門數、引擎容量等)和方法(如啟動、加速、煞車等)封裝在一起,形成一個汽車物件。
-
繼承(Inheritance)
- 定義:一個類別(子類別)可以繼承另一個類別(父類別)的屬性和方法,從而重用和擴展現有的程式碼。
- 例子:可以有一個一般汽車類別,休旅車類別可以繼承一般汽車類別,並擴展其功能。
-
多型(Polymorphism)
- 定義:不同的物件可以對相同的方法呼叫做出不同的反應。這通常通過方法覆蓋(Method Overriding)實現,即子類別可以重新定義父類別的方法。
- 例子:不同類型的汽車可以有各自不同的加速方法,但它們都可以通過相同的方法名稱(如 accelerate)被呼叫。