การรับมรดกใน Java (พร้อมตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

การรับมรดกใน Java เป็นกลไกที่คลาสหนึ่งได้รับฟิลด์และเมธอดของอีกคลาสหนึ่งผ่านทางคีย์เวิร์ด extends กลไกนี้ช่วยส่งเสริมการนำโค้ดกลับมาใช้ใหม่ และจำลองความสัมพันธ์แบบ Is-A ระหว่างคลาสแม่และคลาสลูก

  • 🧬 นิยามของการสืบทอดมรดก: คลาสหนึ่งสามารถรับฟิลด์และเมธอดของอีกคลาสหนึ่งได้โดยใช้ extends
  • 👨👩👧 ความสัมพันธ์แบบ Is-A: จำลองลำดับชั้นของคลาสแม่ (ซูเปอร์คลาส) และคลาสลูก (ซับคลาส)
  • 🗂️ ห้าประเภท: การสืบทอดแบบเดี่ยว แบบหลายฝ่าย แบบหลายระดับ แบบลำดับชั้น และแบบผสมผสาน
  • ???? Java ข้อ จำกัด : Java ไม่รองรับการสืบทอดแบบหลายทางหรือแบบผสมผ่านคลาส
  • 🔑 คำหลักสำคัญ: สามารถเข้าถึงตัวแปร เมธอด และคอนสตรัคเตอร์ของคลาสแม่จากคลาสย่อยได้
  • ✅ ประโยชน์: นำโค้ดที่ผ่านการทดสอบแล้วมาใช้ซ้ำ และเพิ่มฟีเจอร์ใหม่ผ่านคลาสใหม่โดยไม่ต้องแก้ไขคลาสที่มีอยู่เดิม

การรับมรดกใน Java

มรดกคืออะไร?

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

การถ่ายทอดทางพันธุกรรมคืออะไร Java?

Java มรดก เป็นกลไกที่คลาสหนึ่งได้มาซึ่งคุณสมบัติของอีกคลาสหนึ่ง ใน Javaเมื่อมีความสัมพันธ์ "Is-A" ระหว่างสองคลาส เราจะใช้การสืบทอด คลาสพาเรนต์เรียกว่าซูเปอร์คลาส และคลาสที่สืบทอดมาเรียกว่าคลาสย่อย คำสำคัญ extends ถูกใช้โดยคลาสย่อยเพื่อสืบทอดคุณลักษณะของซูเปอร์คลาส การสืบทอดเป็นสิ่งสำคัญเนื่องจากทำให้สามารถนำโค้ดกลับมาใช้ใหม่ได้

Java ไวยากรณ์การสืบทอด:

class subClass extends superClass
{
   //methods and fields
}

ประเภทของการสืบทอดใน Java

ต่อไปนี้เป็นมรดกประเภทต่างๆ Java:

  1. มรดกเดียว
  2. มรดกหลายรายการ
  3. มรดกหลายระดับ
  4. มรดกตามลำดับชั้น
  5. มรดกแบบผสมผสาน

1. การสืบทอดแบบเดี่ยว:

ใน Single Inheritance คลาสหนึ่งจะขยายอีกคลาสหนึ่ง (คลาสเดียวเท่านั้น)

มรดกเดี่ยวใน Java
มรดกเดียว

ในแผนภาพด้านบน คลาส B จะขยายเฉพาะคลาส A คลาส A เป็นคลาสซุปเปอร์ และคลาส B เป็นคลาสย่อย

2. การสืบทอดหลายแบบ:

มรดกหลายรายการเป็นหนึ่งในมรดกใน Java ประเภทที่หนึ่งคลาสขยายมากกว่าหนึ่งคลาส Java ไม่รองรับการสืบทอดหลายรายการ

มรดกหลายรายการใน Java

Java มรดกหลายรายการ

ตามแผนภาพด้านบน คลาส C จะขยายคลาส A และคลาส B ทั้งสองอย่าง

3. การสืบทอดหลายระดับ:

ในการสืบทอดหลายระดับ คลาสหนึ่งสามารถสืบทอดจากคลาสที่ได้รับ ดังนั้นคลาสที่ได้รับจึงกลายเป็นคลาสพื้นฐานสำหรับคลาสใหม่

มรดกหลายระดับใน Java

มรดกหลายระดับ

ตามที่แสดงในแผนภาพ Class C คือคลาสย่อยของ B และ B เป็นคลาสย่อยของ Class A

4. การสืบทอดลำดับชั้น:

ในการสืบทอดแบบลำดับชั้น คลาสหนึ่งจะได้รับการสืบทอดโดยคลาสย่อยหลายคลาส


การสืบทอดลำดับชั้นใน Java

มรดกตามลำดับชั้น

ตามตัวอย่างข้างต้น คลาส B, C และ D สืบทอดคลาส A เดียวกัน

5. การสืบทอดแบบไฮบริด:

การสืบทอดแบบไฮบริดเป็นหนึ่งในประเภทการสืบทอดใน Java ซึ่งเป็นการผสมผสานระหว่างมรดกเดี่ยวและหลายมรดก


มรดกแบบผสมผสาน

มรดกแบบผสมผสาน

ตามตัวอย่างข้างต้น สมาชิกสาธารณะและสมาชิกที่ได้รับการคุ้มครองของคลาส A ทั้งหมดจะได้รับการสืบทอดไปยังคลาส D อันดับแรกผ่านคลาส B และอันดับที่สองผ่านคลาส C

หมายเหตุ Java ไม่รองรับการสืบทอดแบบไฮบริด/หลายรายการ

การรับมรดกใน Java ตัวอย่าง

นี่คือตัวอย่างมรดกใน Java:


ตัวอย่างของการ Java มรดก

Java ตัวอย่างการรับมรดก

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

ซุปเปอร์คีย์เวิร์ด

คำสำคัญ super คล้ายกับคำสำคัญ “this” คำสำคัญ super สามารถใช้เพื่อเข้าถึงข้อมูลสมาชิกหรือวิธีการใดๆ ของคลาสหลัก คำสำคัญ Super สามารถใช้ได้ที่ ตัวแปรวิธีการและระดับตัวสร้าง

ไวยากรณ์:

super.<method-name>();

ตรวจสอบด้วย: - คำหลักนี้ใน Java: คืออะไร & วิธีใช้กับตัวอย่าง

เรียนรู้การสืบทอดใน OOP พร้อมตัวอย่าง

พิจารณาใบสมัครธนาคารเดียวกันจาก ตัวอย่างก่อนหน้า

เราควรจะเปิดบัญชีสองประเภทที่แตกต่างกัน ประเภทหนึ่งสำหรับการออมและอีกประเภทหนึ่งสำหรับการตรวจสอบ (หรือที่เรียกว่ากระแสรายวัน)

การสืบทอดใน OOP

ลองเปรียบเทียบและศึกษาว่าเราสามารถเข้าถึงการเขียนโค้ดจาก a มุมมองการเขียนโปรแกรมเชิงโครงสร้างและเชิงวัตถุ

วิธีการเชิงโครงสร้าง: ในการเขียนโปรแกรมเชิงโครงสร้าง เราจะสร้างฟังก์ชันสองฟังก์ชัน –

  1. หนึ่งที่จะถอนตัว
  2. และอีกอันสำหรับการฝากเงิน

เนื่องจากการทำงานของฟังก์ชันเหล่านี้ยังคงเหมือนเดิมในบัญชีต่างๆ

การสืบทอดใน OOP

แนวทางของ OOP: ในขณะที่ใช้ OOP วิธีการเขียนโปรแกรม เราจะสร้างสองคลาส

  • แต่ละอันมีฟังก์ชั่นการฝากและถอนเงิน
  • นี่จะเป็นการทำงานพิเศษที่ซ้ำซ้อน

การสืบทอดใน OOP

เปลี่ยนคำขอในซอฟต์แวร์

ขณะนี้มีการเปลี่ยนแปลงข้อกำหนดข้อกำหนดสำหรับสิ่งที่พบเห็นได้ทั่วไปในอุตสาหกรรมซอฟต์แวร์ คุณควรจะเพิ่มฟังก์ชันบัญชีธนาคารที่ได้รับสิทธิพิเศษพร้อมวงเงินเบิกเกินบัญชี โดยพื้นฐานแล้ว เงินเบิกเกินบัญชีคือสิ่งอำนวยความสะดวกที่คุณสามารถถอนเงินได้มากกว่ายอดคงเหลือที่มีอยู่ในบัญชีของคุณ

เปลี่ยนคำขอในซอฟต์แวร์

วิธีการเชิงโครงสร้าง: เมื่อใช้วิธีการใช้งาน ฉันต้องแก้ไขฟังก์ชันการถอนของฉัน ซึ่งได้รับการทดสอบและพื้นฐานแล้ว และเพิ่มวิธีการด้านล่างเพื่อดูแลข้อกำหนดใหม่

เปลี่ยนคำขอในซอฟต์แวร์

แนวทางของ OOP: เมื่อใช้วิธีการของ OOP คุณเพียงแค่ต้องเขียนคลาสใหม่ที่มีการใช้งานฟังก์ชันการถอนที่เป็นเอกลักษณ์ เราไม่เคยสัมผัสโค้ดที่ทดสอบแล้ว

เปลี่ยนคำขอในซอฟต์แวร์

คำขอเปลี่ยนแปลงอื่น

จะเกิดอะไรขึ้นหากข้อกำหนดมีการเปลี่ยนแปลงเพิ่มเติม ชอบที่จะเพิ่มบัญชีบัตรเครดิตที่มีข้อกำหนดการฝากเงินเฉพาะของตัวเอง.

คำขอเปลี่ยนแปลงหลายรายการในข้อกำหนดซอฟต์แวร์

วิธีการเชิงโครงสร้าง: เมื่อใช้วิธีการเชิงโครงสร้าง คุณจะต้องเปลี่ยนรหัสเงินฝากที่ทดสอบอีกครั้ง

แนวทางเชิงโครงสร้างของคำขอเปลี่ยนแปลงหลายรายการในซอฟต์แวร์

แนวทางของ OOP: แต่ถ้าใช้แนวทางเชิงวัตถุ คุณก็แค่สร้างคลาสใหม่ที่มีการใช้งานวิธีการฝากเงินเฉพาะของตัวเอง (ไฮไลต์สีแดงในภาพด้านล่าง) ดังนั้นถึงแม้ว่าการเขียนโปรแกรมเชิงโครงสร้างจะดูเหมือนเป็นวิธีที่ง่ายในตอนแรก แต่การเขียนโปรแกรมเชิงวัตถุจะชนะในระยะยาว

แนวทางของ OOP ต่อคำขอเปลี่ยนแปลงหลายรายการ

ข้อดีของการสืบทอดใน OOP

แต่อาจมีคนแย้งว่าในทุกคลาส คุณมีโค้ดที่ซ้ำกัน

เพื่อเอาชนะปัญหานี้ คุณต้องสร้างคลาสหลัก เช่น “account” และใช้งานฟังก์ชันฝากและถอนเงินแบบเดียวกัน และสร้างคลาสย่อยที่สืบทอดคลาส “account” เพื่อให้คลาสย่อยสามารถเข้าถึงฟังก์ชันถอนและฝากเงินในคลาส account ได้ ฟังก์ชันเหล่านี้ไม่จำเป็นต้องใช้งานแยกกัน นี่คือ การสืบทอดใน java .

ข้อดีของการสืบทอดใน OOP

ข้อดีของการสืบทอดใน OOP

คำถามที่พบบ่อย

Java หลีกเลี่ยงการสืบทอดคลาสซ้ำซ้อนเพื่อป้องกัน "ปัญหาเพชร" ซึ่งคอมไพเลอร์ไม่สามารถตัดสินใจได้ว่าจะใช้วิธีการสืบทอดใด แทนที่จะเป็นเช่นนั้น Java ช่วยให้คลาสสามารถใช้งานอินเทอร์เฟซหลายตัวเพื่อให้ได้ความยืดหยุ่นที่คล้ายคลึงกันอย่างปลอดภัย

คำว่า `this` หมายถึงอ็อบเจ็กต์ปัจจุบันและสมาชิกของอ็อบเจ็กต์นั้น ในขณะที่ `super` หมายถึงคลาสแม่โดยตรง ใช้ `super` เพื่อเรียกใช้ตัวแปร เมธอด หรือคอนสตรัคเตอร์ของคลาสแม่จากคลาสย่อย

การสืบทอด (Inheritance) จำลองความสัมพันธ์แบบ “เป็น-มี” (Is-A) โดยที่คลาสย่อยสืบทอดมาจากคลาสแม่ ส่วนการประกอบ (Composition) จำลองความสัมพันธ์แบบ “มี-มี” (Has-A) โดยที่คลาสหนึ่งบรรจุอ็อบเจ็กต์อื่น ๆ การประกอบมักมีความยืดหยุ่นมากกว่าและเป็นที่นิยมสำหรับงานออกแบบที่เชื่อมโยงกันอย่างหลวม ๆ

AI สามารถวิเคราะห์ความรับผิดชอบของคลาส แนะนำคลาสพื้นฐานที่ใช้ร่วมกัน แนะนำอินเทอร์เฟซแทนการสืบทอดแบบลึก และระบุโค้ดที่ซ้ำกัน ช่วยได้ping นักพัฒนาสร้างโครงสร้างลำดับชั้นที่สะอาดตาและนำกลับมาใช้ใหม่ได้ โดยยึดหลักการออกแบบเชิงวัตถุ

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

สรุปโพสต์นี้ด้วย: