更新於 2025/01/21閱讀時間約 6 分鐘

物件導向程式設計基礎:類別、物件、封裝、繼承和多型

兩大基礎概念

  1. 類別Class
  2. 物件Object

三大特性

  1. 封裝
  2. 繼承
  3. 多型

類別 Class

在程式語言中,類別定義一件事物的抽象特點。類別的定義包含了資料的形式(屬性, Field)以及對資料的操作(方法, Method)。我們也可以想像成類別是汽車的設計藍圖(blueprint),其中我們可以在這張藍圖定義抽象的內容(也就是屬性、方法),例如汽車的廠牌、汽車的車名以及馬力和取得汽車資訊等。

public class CarModel{
public string Brand {get;set;}
public string CarType {get;set;}
public int seat {get;set;}
public Datetime ManufactureDate{get;set;}
public string ManufactureYearStr{
get{
return ManufactureDate.Tostring("yyyy")
}
}
public Decimal Price{get;set;}
}

物件 Object

物件也就是類別的實例,也就是說有了類別這張藍圖我們可以在程式中產生許多汽車類別的資料,而這些資料彼此之間不互相影響,每一個皆是獨立的。

var MazdaM3 = new CarModel(){
Brand = "Mazda",
CarType = "Hatchback",
seat = 5,
ManufactureDate = DateTime.Parse("2020/10/10"),
Price = 990000
}

var BMWX5 =new CarModel(){
Brand = "BMW",
CarType = "SUV",
seat = 5,
ManufactureDate = DateTime.Parse("2018/10/10"),
Price = 2590000
}

封裝

即是將物件內部的資料隱藏起來,只能透過物件本身所提供的介面(interface)取得物件內部屬性或者方法,物件內部的細節資料或者邏輯則隱藏起來,其他物件即無法瞭解此物件的內部細節,若不經過允許之窗口(即此物件提供之方法)便無從更動此物件內之資料。簡白的說,對一件事情只需要理解他的外在就好,不需要了解裡面內部的構造


繼承

在某種情況下,一個類別會有「子類別」。子類別比原本的類別(稱為父類別)要更加具體化,也就是說子類別繼承了父類別。例如:計程車(子類別)繼承了汽車(父類別)原有的屬性以及方法,也新增了自己特有的屬性(driverName)。

public class CarModel{
public string Brand {get;set;}
public string CarType {get;set;}
public int seat {get;set;}
public Datetime ManufactureDate{get;set;}
public string ManufactureYearStr{
get{
return ManufactureDate.Tostring("yyyy")
}
}
public Decimal Price{get;set;}
}

public class TaxiModel : CarModel{
public string DriverName{get;set;}
public int Seniority{get;set;}
}

var ToyotaAltisTaxi = new TaxiModel (){
Brand = "Toyota",
CarType = "Hatchback",
seat = 5,
ManufactureDate = DateTime.Parse("2019/02/10"),
Price = 700000,
DriverName = "小明",
Seniority = 10
}

多型

簡單來說就是相同名稱的方法(Method),**多個相同名稱的方法,傳入不同的參數,會執行不同的敘述。**多型(Polymorphism)則包含多載(Overloading)和複寫(Overriding)。

多載(Overloading) — 是指說在相同類別中,定義名稱相同,但是參數個數不同,或是參數型態不同的函式,這樣就可以利用參數個數或者參數型態,呼叫到對應的方法。例如:一個計算面積的方法,如果傳入一個參數,就當正方形來算面積;傳入兩個參數,就當成長方形來算面積。

public int GetArea(int length){
var result = length*length;
return result;
}

public int GetArea(int hight,int width){
var result = width * hight;
return result;
}

public int GetArea(int length,float PI){
var result = length * length * PI;
return result;
}

分享至
成為作者繼續創作的動力吧!
© 2025 vocus All rights reserved.