メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Parent Class และ Child Class: ความสัมพันธ์แบบสืบทอด

บทความนี้อธิบายความสัมพันธ์ระหว่าง Parent Class (Class แม่) และ Child Class (Class ลูก) ในการสืบทอดคุณสมบัติ (Inheritance) โดย Child Class จะสืบทอดคุณสมบัติจาก...

Parent Class และ Child Class: ความสัมพันธ์แบบสืบทอด

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับ Inheritance หรือการสืบทอดคุณสมบัติ ซึ่งเป็นหัวใจสำคัญของการเขียนโปรแกรมเชิงวัตถุ (OOP) ในบทนี้ เราจะเจาะลึกความสัมพันธ์ระหว่าง Parent Class (Class แม่) และ Child Class (Class ลูก) เพื่อให้เข้าใจถึงกลไกการสืบทอดอย่างละเอียด

ความหมายของ Parent Class และ Child Class

Parent Class (หรือ Superclass, Base Class) คือ Class ที่เป็นต้นแบบ หรือ Class แม่ ที่ Child Class จะสืบทอดคุณสมบัติและพฤติกรรมไปใช้งาน เป็นเหมือนแม่พิมพ์ที่กำหนดโครงสร้างพื้นฐาน

Child Class (หรือ Subclass, Derived Class) คือ Class ที่สืบทอดคุณสมบัติและพฤติกรรมจาก Parent Class เป็นเหมือนลูกที่รับมรดกจากแม่ และสามารถเพิ่มเติมหรือปรับเปลี่ยนคุณสมบัติเหล่านั้นได้

ลองนึกภาพว่า Parent Class คือ "สัตว์" และ Child Class คือ "สุนัข" สุนัขเป็นสัตว์ ดังนั้นจึงสืบทอดคุณสมบัติพื้นฐานของสัตว์ เช่น กิน นอน หายใจ แต่ก็มีคุณสมบัติเฉพาะของสุนัขเอง เช่น เห่า วิ่งไล่ลูกบอล

ตัวอย่างง่ายๆ ของ Parent Class และ Child Class

พิจารณา Code ตัวอย่างต่อไปนี้:

<?php

class Animal {
  public $name;

  public function __construct($name) {
    $this->name = $name;
  }

  public function makeSound() {
    echo "Generic animal sound\n";
  }
}

class Dog extends Animal {
  public function makeSound() {
    echo "Woof!\n";
  }
}

$animal = new Animal("Generic Animal");
$animal->makeSound(); // Output: Generic animal sound

$dog = new Dog("Buddy");
$dog->makeSound(); // Output: Woof!

?>

ในตัวอย่างนี้:

  • Animal คือ Parent Class
  • Dog คือ Child Class ที่สืบทอดมาจาก Animal โดยใช้ Keyword extends
  • Dog สืบทอด Property $name และ Method makeSound() จาก Animal
  • Dog *Override* Method makeSound() เพื่อให้มีพฤติกรรมเฉพาะของสุนัข (เห่า)

การเข้าถึง Properties และ Methods ของ Parent Class

Child Class สามารถเข้าถึง Properties และ Methods ของ Parent Class ได้ ขึ้นอยู่กับ Access Modifiers ที่กำหนดไว้ (public, protected, private) เราได้เรียนรู้เรื่อง Access Modifiers ในบทก่อนๆ แล้ว:

  • Public: สามารถเข้าถึงได้จากทุกที่ (ภายใน Class เอง, Child Class, ภายนอก Class)
  • Protected: สามารถเข้าถึงได้จากภายใน Class เอง และจาก Child Class เท่านั้น
  • Private: สามารถเข้าถึงได้จากภายใน Class เองเท่านั้น

ตัวอย่าง:

<?php

class Animal {
  public $publicProperty = "Public";
  protected $protectedProperty = "Protected";
  private $privateProperty = "Private";

  public function getPrivateProperty() {
    return $this->privateProperty; // สามารถเข้าถึงจากภายใน Animal ได้
  }
}

class Dog extends Animal {
  public function accessProperties() {
    echo $this->publicProperty . "\n"; // เข้าถึงได้
    echo $this->protectedProperty . "\n"; // เข้าถึงได้
    // echo $this->privateProperty . "\n"; // Error: Cannot access private property
    echo $this->getPrivateProperty() . "\n"; // เข้าถึงได้ผ่าน Method ของ Animal
  }
}

$dog = new Dog();
$dog->accessProperties();

echo $dog->publicProperty . "\n"; // เข้าถึงได้
// echo $dog->protectedProperty . "\n"; // Error: Cannot access protected property
// echo $dog->privateProperty . "\n"; // Error: Cannot access private property

?>

จากตัวอย่าง: Child Class (Dog) สามารถเข้าถึง publicProperty และ protectedProperty ของ Parent Class (Animal) ได้ แต่ไม่สามารถเข้าถึง privateProperty ได้โดยตรง ต้องเข้าถึงผ่าน Method ที่กำหนดไว้ใน Parent Class (เช่น getPrivateProperty())

การ Override Methods

การ Override Method คือการที่ Child Class สร้าง Method ที่มีชื่อเหมือนกับ Method ใน Parent Class เพื่อเปลี่ยนพฤติกรรมของ Method นั้นให้เหมาะสมกับ Child Class เอง เราได้เห็นตัวอย่างการ Override ในตัวอย่างแรกที่ Dog Override makeSound()

เหตุผลที่ต้อง Override:

  • การปรับเปลี่ยนพฤติกรรม: เพื่อให้ Child Class มีพฤติกรรมที่แตกต่างจาก Parent Class
  • การเพิ่ม Functionality: เพื่อเพิ่มความสามารถใหม่ๆ ให้กับ Child Class โดยอิงจากพื้นฐานของ Parent Class

ตัวอย่างเพิ่มเติมของการ Override:

<?php

class Vehicle {
  public function startEngine() {
    echo "Starting generic engine\n";
  }
}

class Car extends Vehicle {
  public function startEngine() {
    echo "Starting car engine\n";
  }
}

class Motorcycle extends Vehicle {
  public function startEngine() {
    echo "Starting motorcycle engine\n";
  }
}

$vehicle = new Vehicle();
$vehicle->startEngine(); // Output: Starting generic engine

$car = new Car();
$car->startEngine(); // Output: Starting car engine

$motorcycle = new Motorcycle();
$motorcycle->startEngine(); // Output: Starting motorcycle engine

?>

ในตัวอย่างนี้: Car และ Motorcycle ต่างก็เป็น Vehicle แต่มีวิธีการสตาร์ทเครื่องยนต์ที่แตกต่างกัน จึง Override Method startEngine() เพื่อให้เหมาะสมกับประเภทของยานพาหนะ

สรุป

Parent Class และ Child Class เป็นความสัมพันธ์ที่สำคัญใน Inheritance ซึ่งช่วยให้เราสามารถสร้าง Class ที่มีความเฉพาะเจาะจง โดยอิงจาก Class ที่เป็นพื้นฐาน ทำให้ Code มีโครงสร้างที่ดี ลดความซ้ำซ้อน และง่ายต่อการดูแลรักษา การเข้าใจ Access Modifiers และการ Override Methods เป็นสิ่งจำเป็นเพื่อให้สามารถใช้ Inheritance ได้อย่างมีประสิทธิภาพ ในบทถัดไป เราจะเรียนรู้เกี่ยวกับ Keyword parent ซึ่งเป็นเครื่องมือสำคัญในการเข้าถึง Methods ของ Parent Class จากภายใน Child Class

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る