ความเข้าใจในปัจจุบันของฉันเกี่ยวกับการใช้งานมรดกคือควรขยายชั้นเรียนเฉพาะเมื่อมีความสัมพันธ์แบบ IS-A หากคลาสพาเรนต์สามารถมีประเภทลูกที่เฉพาะเจาะจงเพิ่มเติมด้วยฟังก์ชันการทำงานที่แตกต่างกัน แต่จะแบ่งปันองค์ประกอบทั่วไปที่มีนามธรรมในผู้ปกครอง
ฉันกำลังถามความเข้าใจนั้นเพราะสิ่งที่อาจารย์ Java ของฉันแนะนำให้เราทำ เขาแนะนำว่าสำหรับJSwing
แอปพลิเคชันที่เรากำลังสร้างในชั้นเรียน
หนึ่งควรขยายทุกJSwing
ชั้นเรียน ( JFrame
, JButton
, JTextBox
ฯลฯ ) ในชั้นเรียนที่กำหนดเองแยกต่างหากและระบุ GUI การปรับแต่งที่เกี่ยวข้องในพวกเขา (เช่นขนาดส่วนประกอบฉลากส่วนประกอบ ฯลฯ )
จนถึงตอนนี้ดีมาก แต่เขาก็ยังแนะนำต่อไปว่า JButton ทุกคนควรมีคลาสแบบขยายที่กำหนดเองของตนเองแม้ว่าปัจจัยที่แตกต่างเท่านั้นคือฉลากของพวกเขา
สำหรับเช่นหาก GUI มีสองปุ่มโอเคและยกเลิก เขาแนะนำให้ขยายเวลาดังต่อไปนี้:
class OkayButton extends JButton{
MainUI mui;
public OkayButton(MainUI mui) {
setSize(80,60);
setText("Okay");
this.mui = mui;
mui.add(this);
}
}
class CancelButton extends JButton{
MainUI mui;
public CancelButton(MainUI mui) {
setSize(80,60);
setText("Cancel");
this.mui = mui;
mui.add(this);
}
}
อย่างที่คุณเห็นความแตกต่างเพียงอย่างเดียวคือในsetText
ฟังก์ชั่น
ดังนั้นการปฏิบัติมาตรฐานนี้คืออะไร?
Btw หลักสูตรที่กล่าวถึงนี้เรียกว่าBest Programming Practices ใน Java
[ตอบจากศาสตราจารย์]
ดังนั้นฉันจึงพูดถึงปัญหากับอาจารย์และยกประเด็นทั้งหมดที่ระบุไว้ในคำตอบ
เหตุผลของเขาคือ subclassing ให้โค้ดที่นำมาใช้ซ้ำได้ในขณะที่ปฏิบัติตามมาตรฐานการออกแบบ GUI ตัวอย่างเช่นหากผู้พัฒนาได้ใช้กำหนดเองOkay
และCancel
ปุ่มในหนึ่งหน้าต่างมันจะง่ายกว่าที่จะวางปุ่มเดียวกันใน Windows อื่น ๆ เช่นกัน
ฉันได้รับเหตุผลที่ฉันคิดว่า แต่ก็ยังคงเป็นเพียงการใช้ประโยชน์จากการสืบทอดและทำให้รหัสเปราะบาง
หลังจากนั้นนักพัฒนาซอฟต์แวร์รายใดสามารถโทรsetText
ไปที่Okay
ปุ่มและเปลี่ยนโดยไม่ได้ตั้งใจ คลาสย่อยจะกลายเป็นความรำคาญในกรณีนั้น
JButton
และเรียกวิธีการสาธารณะในนวกรรมิกเมื่อคุณสามารถสร้างJButton
และเรียกวิธีการสาธารณะแบบเดียวกันเหล่านั้นนอกห้องเรียน?