ฉันได้รับการสอนด้วยเช่นกันและฉันชอบอินเทอร์เฟซมากที่สุดเท่าที่จะเป็นไปได้ (แน่นอนว่าฉันยังคงใช้การสืบทอดอยู่ซึ่งเหมาะสม)
สิ่งหนึ่งที่ฉันคิดว่ามันคือ decouple รหัสของคุณจากการใช้งานเฉพาะ สมมติว่าฉันมีคลาสที่ชื่อว่า ConsoleWriter และมันถูกส่งผ่านไปยังเมธอดเพื่อเขียนบางสิ่งออกมาและมันเขียนลงในคอนโซล ตอนนี้สมมติว่าฉันต้องการเปลี่ยนไปใช้การพิมพ์เป็นหน้าต่าง GUI ตอนนี้ฉันต้องปรับเปลี่ยนวิธีการหรือเขียนใหม่ที่ใช้ GUIWriter เป็นพารามิเตอร์ ถ้าฉันเริ่มต้นด้วยการกำหนดอินเทอร์เฟซ IWriter และมีวิธีการใน IWriter ฉันสามารถเริ่มต้นด้วย ConsoleWriter (ซึ่งจะใช้อินเทอร์เฟซ IWriter) และจากนั้นเขียนคลาสใหม่ที่เรียกว่า GUIWriter (ซึ่งยังใช้ IWriter อินเตอร์เฟส) จะต้องเปลี่ยนคลาสที่ถูกส่งผ่านไป
อีกสิ่งหนึ่ง (ซึ่งเป็นจริงสำหรับ C #, ไม่แน่ใจเกี่ยวกับ Java) คือคุณสามารถขยายได้ 1 คลาสเท่านั้น แต่ใช้อินเตอร์เฟสจำนวนมาก ให้บอกว่าฉันมีชั้นเรียนที่ชื่อว่าครูอาจารย์และครูสอนวิชาประวัติศาสตร์ ตอนนี้ MathTeacher และ HistoryTeacher ต่อจากอาจารย์ แต่ถ้าเราต้องการชั้นเรียนที่แสดงถึงคนที่เป็นทั้ง MathTeacher และ HistoryTeacher มันอาจดูยุ่งเหยิงเมื่อพยายามสืบทอดจากหลาย ๆ คลาสเมื่อคุณสามารถทำได้ทีละครั้ง (มีวิธี แต่มันไม่เหมาะที่สุด) ด้วยอินเทอร์เฟซคุณสามารถมี 2 อินเตอร์เฟสที่เรียกว่า IMathTeacher และ IHistoryTeacher จากนั้นมีคลาสหนึ่งที่ขยายจากอาจารย์และใช้อินเทอร์เฟซเหล่านั้น 2
ข้อเสียอย่างหนึ่งที่ใช้อินเทอร์เฟซคือบางครั้งฉันเห็นคนทำซ้ำรหัส (เนื่องจากคุณต้องสร้างการใช้งานสำหรับแต่ละคลาสใช้อินเทอร์เฟซ) อย่างไรก็ตามมีวิธีแก้ไขปัญหานี้อย่างสะอาดเช่นการใช้สิ่งต่าง ๆ เช่นตัวแทน (ไม่แน่ใจ Java เทียบเท่ากับอะไร)
คิดว่าเหตุผลที่ดีที่สุดในการใช้ส่วนต่อประสานมากกว่าการสืบทอดคือการแยกรหัสการใช้งานออก แต่อย่าคิดว่าการสืบทอดนั้นชั่วร้ายเพราะมันยังมีประโยชน์มาก