Method Overriding

ปรมินทร์ หิรัญรัตนาธร 650710562

Method Overriding คือเมธอดชนิดหนึ่งที่สามารถสืบทอดได้ คือการสร้างเมธอดซ้ำในคลาสลูก โดยคลาสลูกสามารถปรับเปลี่ยนการทำงานของเมธอดจากคลาสแม่ได้ แต่ยังมีชื่อและพารามิเตอร์เดิมในคลาสลูก

Method Overriding in C#

Method Overriding ใน C# เป็นการที่เมธอดสามารถเรียกใช้ฟังก์ชันจากคลาสแม่ที่สืบทอดมา สร้างเมธอดที่สืบทอดลักษณะการทำงานมาโดยมีชื่อคลาส พารามิเตอร์และการรีเทิร์นเหมือนกันกับเมธอดในคลาสแม่, มีการรองรับ polymorphism, จะต้องมีระดับการเข้าถึงเดียวกัน

ตัวอย่าง

class base_class
{
    public void gfg();
}

class derived_class : base_class
{
    public void gfg();
}

class Main_Method
{
 static void Main()
 {
    derived_class d = new derived_class();
    d.gfg();
 }
}

ใน C# สามารถใช้คีย์เวิร์ด 3 ประเภทใน Method Overriding

- virtual keyword : ใช้เพื่อเปลี่ยนวิธีการ คุณสมบัติ ให้มีการแทนที่ในคลาสที่สืบทอดมา ตัวอย่าง

- override : ใช้ในเมธอดในคลาสลูก เพื่อให้สามารถปรับเปลี่ยนเมธอดเสมือนที่สืบทอดมาจากคลาสแม่ ตัวอย่าง

- base Keyword : ใช้เพื่อเข้าถึงสมาชิกในคลาสแม่ที่สืบทอดมาเช่น เมธอด ฟิลด์ คอนสตรัคเตอร์ ตัวอย่าง

เอาท์พุต

Method Overriding in Java

Method Overriding ใน Java เป็นการที่คลาสลูกนำลักษณะการทำงานที่มีอยู่แล้วในคลาสแม่มาใช้ , มีการรองรับ polymorphism ,ในการใช้งานต้องระบุ @override เพื่อแสดงว่าเมธอดคลาสลูกเป็นการ overriding จากคลาสแม่

เอาท์พุต

กฎสำหรับ Java Method Overriding

1. Overriding and Access Modifiers สามารถทำให้เมธอดมีการเข้าถึงได้มากขึ้น แต่ไม่สามารถลดระดับการเข้าถึงได้ เพราะจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์ได้

ตัวอย่าง

เอาท์พุต

  1. Final methods can not be overridden สามารถประกาศ final เพื่อไม่ให้เมธอดมีการ overridden

ตัวอย่าง

เอาท์พุต

  1. Static methods can not be overridden เมื่อมีการประกาศ static method ที่มีลักษณะเหมือนกันกับ static method ในคลาสแม่จะเรียกว่า method hiding

ตัวอย่าง

เอาท์พุต

  1. Private methods can not be overridden Private method จะไม่สามารถ overridden ได้เนื่องจาก Private method จะเข้าถึงได้เฉพาะในคลาสที่มันถูกประกาศเท่านั้น ทำให้คลาสลูกไม่สามารถเข้าถึงได้

ตัวอย่าง

เอาท์พุต

  1. The overriding method must have the same return type เมธอดที่ถูก overriding ในคลาสลูกต้องมีชนิดการรีเทิร์นที่เหมือนกันกับเมธอดแม่ เรียกว่า covariant return type

ตัวอย่าง

เอาท์พุต

  1. Invoking overridden method from sub-class สามารถเรียกใช้เมธอดในคลาสแม่ในการ overriding method โดยใช้ super keyword

ตัวอย่าง

เอาท์พุต

Overriding and Constructor ไม่สามารถ override คอนสตรัคเตอร์ได้เนื่องจากคอนสตรัคเตอร์ในคลาสแม่และลูกจะไม่สามารถมีชื่อเดียวกันได้

Overriding and Exception-Handling มีกฎ 2 ข้อดังนี้

1. หากคลาสแม่ไม่มีการประกาศ Exception วิธีที่คลาสลูก overriden จะประกาศ Exception โดยไม่ได้รับการตรวจสอบ

ตัวอย่าง

  1. ถ้าคลาสแม่มีการประกาศ Exception วิธีที่คลาสลูก overriden จะไม่สามารถประกาศ Exception หลักได้ สามารถประกาส Exception แบบเดียวกับคลาสลูกได้

ตัวอย่าง

Overriding and Abstract Method Abstract methods ใน interface หรือ abstract class เป็นเมธอดปล่าวๆ มีไว้เพื่อให้ overridden โดย concrete classes กำหนดการทำงานของตัวเอง

Overriding and Synchronized/strictfp Method Synchronized/strictfp ไม่มีผลต่อกฎของ overridden

Method Overriding in Python

Method Overriding ใน Python วิธีการดำเนินจะถูกกำหนดโดยออบเจ็คต์ที่เรียกใช้ ออบเจ็คต์จะเป็นตัวกำหนดว่าเวอร์ชั่นใดจะถูกเรียกใช้ หากออบเจ็คต์เรียกใช้ในคลาสแม่เวอร์ชันของคลาสแม่จะถูกเรียกใช้ ถ้าออบเจ็คต์เรียกใช้ในคลาสลูกเวอร์ชั่นในคลาสลูกจะถูกเรียกใช้

ตัวอย่าง

เอาท์พุต

Method Overriding with Multilevel and Multiple Inheritance

- Mutiple Inheritance : คือการที่คลาสได้รับการสืบทอดจากคลาสแม่มากกว่าหนึ่งคลาส

ตัวอย่าง

เอาท์พุต

- Multilevel Inheritance : มีลักษณะการสืบทอดที่มีหลายระดับของคลาส มีความสัมพันธ์ในฐานะลูกและหลานเช่น คลาส A สืบทอดไปคลาส B คลาส B สืบทอดไปคลาส C

ตัวอย่าง

เอาท์พุต

Calling the Parent’s method within the overridden method เรียกใช้เมธอดคลาสแม่ได้ใน overridden method มี 2 วิธี

1. Using Classname : เรียกใช้โดยการใช้ Parent classname.method ภายใน overridden method

ตัวอย่าง

เอาท์พุต

2. Using Super() : ฟังชันก์ Python super() ทำให้อ้างอิงถึงคลาสหลักได้ โดยฟังชันก์จะรีเทิร์น proxy object

ตัวอย่าง

เอาท์พุต

ตัวอย่างโค้ดเปรียบเทียบ

reference

C# method overriding and override https://www.geeksforgeeks.org/c-sharp-method-overriding/

C# virtual keywordhttps://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual

C# base Keyword https://www.javatpoint.com/c-sharp-base

java method overriding, กฎสำหรับ Java Method Overriding, Overriding and Constructor, Overriding and Abstract Method, Overriding and Synchronized/strictfp Method https://www.geeksforgeeks.org/overriding-in-java/

java Overriding and Exception-Handling https://www.javatpoint.com/exception-handling-with-method-overriding

Python Method Overriding, Calling the Parent’s method within the overridden method https://www.geeksforgeeks.org/method-overriding-in-python/

Python Method overriding with multiple and multilevel inheritance https://www.javatpoint.com/method-overriding-in-python

presentation

video

https://youtu.be/CGjiBvMc4mo

Last updated