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

สืบทอดหลายอินเทอร์เฟซ - 1

ลองนึกภาพคุณกำลังเขียนเกมคอมพิวเตอร์ และตัวละครของมัน (วัตถุของคุณ) ต้องมีพฤติกรรมที่ซับซ้อนมาก: เดินไปรอบ ๆ แผนที่, รวบรวมรายการ, ทำภารกิจ, สื่อสารกับตัวละครอื่น, ฆ่าใครบางคน, ช่วยคนอื่น สมมติว่าคุณสามารถแบ่งวัตถุทั้งหมดออกเป็น 20 หมวดหมู่ ซึ่งหมายความว่า หากคุณโชคดี คุณจะสามารถผ่านคลาสเพียง 20 คลาสเพื่อกำหนดวัตถุของคุณ แต่นี่คือสิ่งที่จับได้: วัตถุเหล่านี้จะมีรูปแบบการโต้ตอบที่ไม่เหมือนใครกี่รูปแบบ วัตถุแต่ละประเภทสามารถมีปฏิสัมพันธ์ที่ไม่ซ้ำกันกับวัตถุประเภทอื่นๆ อีก 20 ประเภท (เรากำลังนับการโต้ตอบกับวัตถุประเภทเดียวกันด้วย) กล่าวอีกนัยหนึ่ง คุณจะต้องเขียนโค้ดสำหรับ 20 x 20 = 400 การโต้ตอบ! และถ้าจำนวนของประเภทวัตถุที่ไม่ซ้ำนั้นไม่ใช่ 20 แต่เป็น 100 จำนวนการโต้ตอบก็อาจเท่ากับ 10,000!

"ว้าว! ตอนนี้ฉันเข้าใจแล้วว่าทำไมการเขียนโปรแกรมถึงเป็นงานที่ยากเช่นนี้"

"มันง่ายมาก ต้องขอบคุณสิ่งที่เป็นนามธรรมมากมาย และต้องขอบคุณไม่น้อยเลยสำหรับการสืบทอดอินเทอร์เฟซที่หลากหลาย"

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

เมื่อเขียนโปรแกรมขนาดใหญ่ นักพัฒนามักจะทำสิ่งนี้ตั้งแต่เริ่มต้น:

1)ระบุความสามารถ/บทบาททั้งหมด

2)กำหนดปฏิสัมพันธ์ระหว่างบทบาทเหล่านี้

3)จากนั้นเพียงกำหนดบทบาทให้กับทุกชั้นเรียน

“ยกตัวอย่างได้ไหม”

"แน่นอน มาดูบทบาทในการ์ตูนเรื่อง "Tom and Jerry" กัน"

รหัสจาวา คำอธิบาย
interface Moveable
{}
— บทบาท/ความสามารถในการเคลื่อนไหว
interface Eatable
{}
— บทบาท/ความสามารถในการรับประทาน
interface Eat
{}
— บทบาท/ความสามารถในการกินคน
class Tom extends Cat implements Moveable, Eatable, Eat
{}
ทอมเป็นแมวที่มีสามบทบาท:
1) เขาสามารถเคลื่อนไหวได้
2) เขาสามารถกินคนได้
3) เขาสามารถถูกคนกินได้ (สุนัข)
class Jerry extends Mouse implements Moveable, Eatable
{}
เจอร์รี่เป็นหนูที่มีสองบทบาท:
1) เขาสามารถเคลื่อนไหวได้
2) เขาสามารถถูกใครกินได้
class Killer extends Dog implements Moveable, Eat
{}
Killer เป็นสุนัขที่มีสองบทบาท: 1) เขาสามารถเคลื่อนไหวได้ 2) เขาสามารถกินคนได้

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