ฉันกำลังพยายามหาวิธีแก้ไขปัญหานี้ให้ดีที่สุดในโครงการที่ฉันกำลังทำอยู่ ฉันจะให้การเปรียบเทียบปัญหา:
มีคลาส รถยนต์ จาก รถยนต์ ฉันสร้าง 3 คลาสที่ขยายมัน:
- รถลิมูซีน ขยาย รถยนต์
- รถบรรทุก ขยาย รถยนต์
- รถบัส ขยาย รถยนต์
ตอนนี้ สมมติว่าฉันรู้ว่ามีคนลืมใส่เมธอด getSpeed() ให้กับคลาส Car และฉันต้องเพิ่มมันเข้าไป แต่ ฉันไม่สามารถแก้ไขคลาส Car ได้เลย และคลาสทั้ง 3 จะต้องขยาย Car ฉันจะเพิ่มฟังก์ชันทั่วไปให้กับคลาสทั้ง 3 เหล่านี้ให้ดีที่สุดโดยไม่ต้องคัดลอกโค้ดวางไปมาได้อย่างไร การใช้งานเมธอด getSpeed() จะเหมือนกันสำหรับแต่ละคลาส ดังนั้นฉันต้องการบางอย่างที่เหมือนกับคลาสนามธรรม แต่ยังคงสามารถเก็บคลาสไว้เป็นการขยาย Car ได้
นี่เป็นตัวอย่างวิธีเดียวของฉันจนถึงตอนนี้ แต่ฉันอยากรู้ว่ามีวิธีที่ดีกว่านี้หรือไม่:
public class Limo extends Car {
CarSpeed cs;
public Limo() {
cs = new CarSpeed(this);
}
}
และให้คลาส CarSpeed มีเมธอด getSpeed() จริง
มีวิธีที่สะอาดกว่าในการทำเช่นนี้โดยที่ฉันไม่รู้หรือไม่? ฉันยังสามารถทำงานใน Java 7 ได้เท่านั้น ดังนั้นฉันไม่คิดว่าฉันจะสามารถใช้คำหลักเริ่มต้นได้ (ไม่ใช่ว่าฉันได้อ่านมันมากพอที่จะรู้ว่ามันใช้ได้กับสถานการณ์นี้หรือไม่ :( )