บทความนี้อธิบายถึงการใช้งานอินเตอร์เฟส Java และคลาสนามธรรม แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ส่วนต่อประสาน
1 เนื่องจาก Java ไม่รองรับการสืบทอดหลายครั้งด้วยอินเทอร์เฟซคลาสสามารถสืบทอดคลาสพาเรนต์เดียวเท่านั้น แต่สามารถใช้งานหลายอินเตอร์เฟสและอินเทอร์เฟซเองก็สามารถสืบทอดหลายอินเตอร์เฟสได้
2 ตัวแปรสมาชิกในอินเทอร์เฟซเป็นประเภทสุดท้ายคงที่สาธารณะโดยค่าเริ่มต้น การเริ่มต้นที่ต้องแสดง
3 วิธีการในอินเทอร์เฟซเป็นนามธรรมสาธารณะโดยค่าเริ่มต้น การประกาศโดยนัย
4 อินเทอร์เฟซไม่มีตัวสร้างและไม่สามารถสร้างอินสแตนซ์ได้
5 อินเทอร์เฟซไม่สามารถใช้อินเทอร์เฟซอื่นได้ แต่สามารถสืบทอดหลายอินเทอร์เฟซ
6 หากคลาสใช้อินเทอร์เฟซวิธีการที่เป็นนามธรรมทั้งหมดในอินเตอร์เฟสจะต้องดำเนินการมิฉะนั้นคลาสจะต้องกำหนดเป็นคลาสนามธรรม
คลาสนามธรรม
1 หากมีการประกาศคลาสเป็นนามธรรมคลาสนี้ไม่สามารถสร้างวัตถุและสามารถใช้งานได้เท่านั้น
2 วิธีนามธรรมต้องมีอยู่ในคลาสนามธรรม
3 อาจมีตัวแปรทั่วไปและวิธีการทั่วไปในคลาสนามธรรม
4 subclasses สืบทอดคลาสนามธรรมจะต้องใช้วิธีการนามธรรมเว้นแต่คลาสย่อยเป็นคลาสนามธรรม
Private Void Print () {}; คำสั่งนี้แสดงถึงการใช้งานที่ว่างเปล่าของวิธีการ
บทคัดย่อการพิมพ์ (); คำสั่งนี้แสดงถึงสิ่งที่เป็นนามธรรมของวิธีการโดยไม่ต้องใช้งาน
ความแตกต่างระหว่างอินเตอร์เฟสและคลาสนามธรรม
1 อินเทอร์เฟซสามารถมีวิธีนามธรรมเท่านั้นและคลาสนามธรรมสามารถมีวิธีการทั่วไป
2 อินเตอร์เฟสสามารถกำหนดคุณสมบัติคงที่คงที่เท่านั้น คลาสบทคัดย่อสามารถกำหนดคุณสมบัติสามัญและคุณสมบัติคงที่คงที่
3 อินเตอร์เฟสไม่มีวิธีการสร้างและคลาสนามธรรมสามารถมีวิธีการสร้าง
คลาสนามธรรมไม่สามารถสร้างอินสแตนซ์ได้ แต่ไม่ได้หมายความว่ามันไม่สามารถมีตัวสร้างได้ คลาสนามธรรมสามารถมีตัวสร้างและเป็นคลาสทดแทน
1 อินเทอร์เฟซเป็นแกนซึ่งกำหนดสิ่งที่ต้องทำและมีวิธีการมากมาย แต่ไม่ได้กำหนดวิธีการเหล่านี้ควรทำอย่างไร
2 หากหลายคลาสใช้อินเทอร์เฟซแต่ละคลาสจะต้องใช้วิธีการเหล่านั้นในรหัส
3 หากการใช้งานของบางคลาสมีบางสิ่งที่เหมือนกันคลาสนามธรรมสามารถเป็นนามธรรมเพื่อให้คลาสนามธรรมสามารถใช้รหัสทั่วไปของอินเทอร์เฟซในขณะที่วิธีการส่วนบุคคลเหล่านั้นจะถูกนำมาใช้โดยแต่ละคลาสย่อย
ดังนั้นคลาสนามธรรมได้รับการออกแบบมาเพื่อทำให้การใช้งานของอินเทอร์เฟซง่ายขึ้น พวกเขาไม่เพียง แต่ให้การใช้วิธีการสาธารณะช่วยให้คุณพัฒนาได้อย่างรวดเร็ว แต่ยังอนุญาตให้ชั้นเรียนของคุณใช้วิธีการทั้งหมดด้วยตนเองโดยไม่มีปัญหาการมีเพศสัมพันธ์อย่างแน่นหนา
แอปพลิเคชันนั้นง่ายมาก
1. กำหนดอินเทอร์เฟซก่อน
2 หากมีการใช้งานอินเทอร์เฟซหลายครั้งที่มีชิ้นส่วนร่วมกันให้ใช้คลาสนามธรรมและรวมเข้าด้วยกัน
ความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม-ฉันเชื่อว่าคุณจะไม่สับสนหลังจากอ่านมัน
ฉันคิดว่าสำหรับโปรแกรมเมอร์ที่ใช้ภาษาการเขียนโปรแกรมเชิงวัตถุคำว่า "อินเทอร์เฟซ" ต้องคุ้นเคย แต่ฉันสงสัยว่าคุณมีข้อสงสัยเช่นนี้: จุดประสงค์ของอินเทอร์เฟซคืออะไร? อะไรคือความแตกต่างระหว่างคลาสและคลาสนามธรรม? สามารถใช้คลาสนามธรรมแทนอินเทอร์เฟซได้หรือไม่? ยิ่งกว่านั้นในฐานะโปรแกรมเมอร์คุณมักจะต้องได้ยินวลี "การเขียนโปรแกรมเชิงอินเตอร์เฟส" ดังนั้นมันหมายความว่าอย่างไร? ความหมายเชิงอุดมการณ์คืออะไร? ความสัมพันธ์กับการเขียนโปรแกรมเชิงวัตถุคืออะไร? บทความนี้จะตอบคำถามเหล่านี้ทีละข้อ
1. ความสัมพันธ์ระหว่างการเขียนโปรแกรมที่เน้นอินเทอร์เฟซกับการเขียนโปรแกรมเชิงวัตถุคืออะไร
ก่อนอื่นการเขียนโปรแกรมเชิงอินเตอร์เฟสและการเขียนโปรแกรมเชิงวัตถุนั้นไม่ได้เป็นแนวนอน มันไม่ใช่แนวคิดการเขียนโปรแกรมอิสระที่ก้าวหน้ากว่าการเขียนโปรแกรมเชิงวัตถุ แต่ติดอยู่กับระบบการคิดเชิงวัตถุและเป็นส่วนหนึ่ง กล่าวอีกนัยหนึ่งมันเป็นหนึ่งในสาระสำคัญของความคิดในระบบการเขียนโปรแกรมเชิงวัตถุ
2. ธรรมชาติของอินเทอร์เฟซ
อินเทอร์เฟซเป็นคำจำกัดความหลายวิธีอย่างชัดเจนโดยไม่มีรหัสร่างกาย มันมีชื่อที่ไม่ซ้ำกันและสามารถนำไปใช้โดยชั้นเรียนหรืออินเทอร์เฟซอื่น ๆ (หรืออาจกล่าวได้ว่าได้รับการสืบทอด) อาจมีลักษณะดังต่อไปนี้ในรูปแบบ:
อินเตอร์เฟส interfacename {โมฆะวิธีการ 1 (); โมฆะวิธีการ 2 (int para1); โมฆะวิธีการ 3 (สตริง para2, สตริง para3); -ดังนั้นสาระสำคัญของอินเทอร์เฟซคืออะไร? หรือความหมายของการมีอยู่ของอินเทอร์เฟซคืออะไร? ฉันคิดว่ามันสามารถพิจารณาได้จากสองมุมมองต่อไปนี้:
1) อินเทอร์เฟซคือชุดของกฎที่ระบุชุดของกฎที่คลาสหรืออินเตอร์เฟสที่ใช้อินเทอร์เฟซนี้ต้องมี มันรวบรวมแนวคิดของธรรมชาติว่า "ถ้าคุณเป็น ... คุณต้องสามารถ ... "
ตัวอย่างเช่นในธรรมชาติผู้คนสามารถกินได้นั่นคือ "ถ้าคุณเป็นมนุษย์คุณจะต้องกิน" จากนั้นเมื่อจำลองในโปรแกรมคอมพิวเตอร์ควรมี iperson (ตามธรรมชาติชื่ออินเตอร์เฟสเริ่มต้นด้วยอินเทอร์เฟซ "i") และมีวิธีการที่เรียกว่า EAT () จากนั้นเรากำหนดว่าทุกชั้นเรียนที่เป็นตัวแทนของ "มนุษย์" จะต้องใช้อินเทอร์เฟซ Iperson ซึ่งจำลองกฎธรรมชาติของ "ถ้าคุณเป็นมนุษย์คุณจะต้องกิน"
จากที่นี่ฉันคิดว่าคุณสามารถเห็นความคิดเชิงวัตถุบางอย่าง หนึ่งในแกนของการคิดเชิงวัตถุคือการจำลองโลกแห่งความเป็นจริงและสิ่งที่เป็นนามธรรมในโลกแห่งความเป็นจริงเป็นหมวดหมู่ โปรแกรมทั้งหมดขึ้นอยู่กับกรณีของประเภทต่าง ๆ ในการสื่อสารซึ่งกันและกันและร่วมมือกันเพื่อให้ฟังก์ชั่นระบบเสร็จสมบูรณ์ สิ่งนี้สอดคล้องกับสภาพการดำเนินงานของโลกแห่งความเป็นจริงและยังเป็นสาระสำคัญของการคิดเชิงวัตถุ
2) อินเทอร์เฟซเป็นตัวแทนที่เป็นนามธรรมของสิ่งที่คล้ายกันในมุมมองที่ละเอียด โปรดทราบว่าที่นี่ฉันเน้นมุมมองที่ละเอียดเพราะแนวคิดของ "สิ่งเดียวกัน" นั้นสัมพันธ์กันและมันแตกต่างกันไปเนื่องจากมุมมองที่แตกต่างกัน
ตัวอย่างเช่นในสายตาของฉันฉันเป็นคนและมีความแตกต่างพื้นฐานระหว่างฉันกับหมู ฉันสามารถยอมรับคำแถลงที่เพื่อนร่วมชั้นของฉันและฉันเหมือนกัน แต่ฉันต้องไม่ยอมรับว่าฉันเป็นเหมือนหมู อย่างไรก็ตามหากดวงตาของนักสัตววิทยาเป็นเหมือนหมูฉันควรจะเหมือนกันเพราะเราเป็นสัตว์ทั้งสองเขาสามารถคิดได้ว่าทั้ง "มนุษย์" และ "หมู" ได้ใช้อินเทอร์เฟซ Ianimal เมื่อเขาศึกษาพฤติกรรมสัตว์เขาจะไม่ปฏิบัติต่อฉันและหมูแยกกัน แต่จะศึกษาจากขนาดอนุภาคขนาดใหญ่ของ "สัตว์" แต่เขาจะคิดว่ามีความแตกต่างที่สำคัญระหว่างฉันกับต้นไม้
ตอนนี้ฉันเปลี่ยนเป็นนักพันธุศาสตร์แล้วสถานการณ์ก็แตกต่างกัน เพราะทุกสิ่งมีชีวิตสามารถสืบทอดได้ในสายตาของเขาฉันไม่เพียง แต่ไม่แตกต่างจากหมู แต่ยังมาจากยุงแบคทีเรียต้นไม้เห็ดหรือแม้แต่ไวรัสซาร์สเพราะเขาคิดว่า เขาจะไม่ศึกษาเราแยกกัน แต่จะศึกษาสิ่งมีชีวิตทั้งหมดเป็นประเภทที่คล้ายกัน ในสายตาของเขาไม่มีความแตกต่างระหว่างมนุษย์และไวรัสมีเพียงสารที่สืบทอดได้และสารที่ไม่ได้รับการรักษา แต่อย่างน้อยก็ยังมีความแตกต่างระหว่างฉันกับหิน
แต่น่าเสียดายที่วันหนึ่งมีชายผู้ยิ่งใหญ่ปรากฏตัวบนโลกชื่อเลนิน หลังจากที่เขาคุ้นเคยกับผลงานชิ้นเอกของ Max และ Engels ของวัตถุนิยมวิภาษวิธีเขามีประสบการณ์มากมายดังนั้นเขาจึงให้คำจำกัดความที่มีชื่อเสียง: เรื่องที่เรียกว่าเป็นความจริงที่มีวัตถุประสงค์ที่สามารถสะท้อนได้จากจิตสำนึก ณ จุดนี้ฉันไม่ได้แตกต่างจากหินร่องรอยของอากาศสำนวนและสนามแม่เหล็กไฟฟ้าที่ส่งสัญญาณโทรศัพท์มือถืออีกต่อไปเพราะในสายตาของเลนินเราทุกคนเป็นความจริงที่มีวัตถุประสงค์ ถ้าเลนินเป็นโปรแกรมเมอร์เขาจะพูดแบบนี้: เรื่องที่เรียกว่าเป็นอินสแตนซ์ที่สร้างขึ้นโดยคลาสทั้งหมดที่ใช้อินเทอร์เฟซทั้งสอง "Ireflectabe" และ "Iesse" (หมายเหตุ: ไตร่ตรองโวลต์สะท้อนความเป็นจริงของวัตถุประสงค์)
บางทีคุณอาจคิดว่าตัวอย่างของฉันข้างต้นเป็นเรื่องไร้สาระ แต่นี่คือความหมายของอินเทอร์เฟซ หนึ่งในความคิดเชิงวัตถุและแกนกลางคือความหลากหลาย polymorphism คืออะไร? เพื่อให้มันตรงไปตรงมามันคือการรักษาสิ่งที่คล้ายกันอย่างไม่เลือกปฏิบัติในระดับมุมมองที่ละเอียดและจัดการกับพวกเขาอย่างสม่ำเสมอ และเหตุผลที่ฉันกล้าทำเช่นนี้เป็นเพราะมีอินเทอร์เฟซ เช่นเดียวกับนักพันธุศาสตร์นั้นเขาเข้าใจว่าสิ่งมีชีวิตทั้งหมดได้ดำเนินการอินเทอร์เฟซที่ไม่สามารถระบุได้ ตราบใดที่พวกเขาเป็นสิ่งมีชีวิตจะต้องมีวิธีการสืบเชื้อสาย () ดังนั้นเขาจึงสามารถศึกษาพวกเขาในลักษณะที่เป็นเอกภาพโดยไม่ต้องศึกษาสิ่งมีชีวิตแต่ละอย่างแยกกันและในที่สุดก็เหนื่อย
บางทีเราอาจไม่สามารถให้ความประทับใจกับธรรมชาติและฟังก์ชั่นของอินเทอร์เฟซ จากนั้นในตัวอย่างต่อไปนี้และการวิเคราะห์รูปแบบการออกแบบหลายรูปแบบคุณจะได้สัมผัสกับความหมายแฝงของอินเทอร์เฟซอย่างสังหรณ์ใจมากขึ้น
3. บทสรุปการเขียนโปรแกรมที่เน้นอินเทอร์เฟซ
ผ่านบทความข้างต้นฉันคิดว่าคุณมีความเข้าใจเกี่ยวกับความหมายเชิงอุดมการณ์ของอินเทอร์เฟซและอินเทอร์เฟซ การเขียนโปรแกรมที่เน้นอินเทอร์เฟซคืออะไร? คำจำกัดความส่วนบุคคลของฉันคือ: ในการวิเคราะห์ระบบและสถาปัตยกรรมเราแยกแยะลำดับชั้นและการพึ่งพา แต่ละระดับไม่ได้ให้บริการโดยตรงกับเลเยอร์ด้านบน (นั่นคือไม่ได้อินสแตนซ์โดยตรงในเลเยอร์ด้านบน) แต่แทนที่จะกำหนดชุดของอินเทอร์เฟซเพียงเปิดเผยฟังก์ชั่นอินเทอร์เฟซกับเลเยอร์ด้านบนเท่านั้น ชั้นบนขึ้นอยู่กับชั้นล่างเท่านั้นและไม่พึ่งพาคลาสเฉพาะ
ประโยชน์ของการทำเช่นนี้ชัดเจนและก่อนอื่นมันเป็นประโยชน์อย่างมากต่อความยืดหยุ่นของระบบ เมื่อต้องเปลี่ยนเลเยอร์ล่างตราบใดที่ฟังก์ชั่นอินเทอร์เฟซและอินเตอร์เฟสยังคงไม่เปลี่ยนแปลงเลเยอร์ด้านบนไม่จำเป็นต้องทำการแก้ไขใด ๆ คุณสามารถเปลี่ยนเลเยอร์ล่างได้โดยไม่ต้องเปลี่ยนรหัสชั้นบนเช่นเดียวกับที่เราเปลี่ยนฮาร์ดไดรฟ์ WD 60G ด้วยฮาร์ดไดรฟ์ Seagate 160 กรัม ไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ ในส่วนอื่น ๆ ของคอมพิวเตอร์ แต่เพียงถอดปลั๊กฮาร์ดไดรฟ์เดิมและเสียบฮาร์ดไดรฟ์ใหม่เนื่องจากส่วนอื่น ๆ ของคอมพิวเตอร์ไม่พึ่งพาฮาร์ดไดรฟ์เฉพาะ แต่พึ่งพาอินเทอร์เฟซ IDE เท่านั้น ตราบใดที่ฮาร์ดไดรฟ์ใช้อินเทอร์เฟซนี้ก็สามารถเปลี่ยนได้ จากที่นี่อินเทอร์เฟซในโปรแกรมนั้นคล้ายกับอินเทอร์เฟซในความเป็นจริงดังนั้นฉันจึงเชื่อเสมอว่าอินเทอร์เฟซคำนั้นคล้ายกันจริงๆ!
ข้อดีอีกอย่างของการใช้อินเทอร์เฟซคือนักพัฒนาส่วนประกอบหรือระดับที่แตกต่างกันสามารถเริ่มการก่อสร้างแบบขนานเช่นเดียวกับผู้ที่สร้างฮาร์ดดิสก์ไม่จำเป็นต้องทำซีพียูหรือจอภาพ ตราบใดที่อินเทอร์เฟซมีความสอดคล้องและการออกแบบมีความสมเหตุสมผลการพัฒนาสามารถดำเนินการได้ในแบบคู่ขนานซึ่งจะช่วยปรับปรุงประสิทธิภาพ
บทความนี้จะมาที่นี่ก่อน ในที่สุดฉันอยากจะพูดอย่างอื่น: สาระสำคัญของการมุ่งเน้นวัตถุคือการจำลองความเป็นจริงซึ่งสามารถกล่าวได้ว่าเป็นวิญญาณของบทความของฉัน ดังนั้นการคิดเพิ่มเติมเกี่ยวกับสิ่งต่าง ๆ ที่มุ่งเน้นวัตถุจากความเป็นจริงจะเป็นประโยชน์อย่างมากในการปรับปรุงการวิเคราะห์ระบบและความสามารถในการออกแบบ
ในบทความถัดไปฉันจะใช้ตัวอย่างเพื่อแสดงวิธีการพื้นฐานของการเขียนโปรแกรมอินเตอร์เฟส
ในบทความที่สามฉันจะวิเคราะห์แนวคิดการเขียนโปรแกรมที่เน้นอินเทอร์เฟซในรูปแบบการออกแบบคลาสสิกและวิเคราะห์แนวคิดที่เน้นอินเทอร์เฟซในสถาปัตยกรรมลำดับชั้น. NET
เพิ่มเติมในบทความนี้:
หลังจากอ่านคำตอบของคุณอย่างรอบคอบฉันมีความสุขมากที่ได้พูดคุยเกี่ยวกับปัญหาทางเทคนิคกับคุณ ขอบคุณเพื่อนของคุณที่ให้การยืนยันและกับเพื่อนของคุณที่หยิบยกความคิดเห็นและคำถามซึ่งกระตุ้นให้ฉันคิดอย่างลึกซึ้งยิ่งขึ้นเกี่ยวกับบางสิ่งบางอย่างและหวังว่าจะก้าวหน้าผ่านเรื่องนี้ ที่นี่ฉันต้องการเพิ่มบางสิ่งบางอย่างเพื่อหารือเกี่ยวกับปัญหาที่เข้มข้นมากขึ้นในการตอบสนอง
1. เกี่ยวกับคำว่า "อินเทอร์เฟซ" สองคำใน "การเขียนโปรแกรมเชิงอินเตอร์เฟส" และภาษาที่เน้นวัตถุเฉพาะ "อินเตอร์เฟส"
ฉันเห็นเพื่อนคนหนึ่งแนะนำว่าคำว่า "อินเทอร์เฟซ" ใน "การเขียนโปรแกรมเชิงอินเตอร์เฟส" ควรมีช่วงที่ใหญ่กว่าอินเทอร์เฟซในภาษาการเขียนโปรแกรมอย่างง่าย หลังจากคิดถึงมันฉันคิดว่ามันสมเหตุสมผลแล้ว สิ่งที่ฉันเขียนที่นี่ไม่มีเหตุผลแน่นอน ฉันคิดว่า "อินเทอร์เฟซ" ในภาษาที่มุ่งเน้นวัตถุหมายถึงโครงสร้างรหัสเฉพาะเช่นอินเทอร์เฟซที่กำหนดไว้ใน C# ด้วยคำหลักอินเตอร์เฟส "อินเทอร์เฟซ" ใน "การเขียนโปรแกรมที่มุ่งเน้นอินเทอร์เฟซ" สามารถกล่าวได้ว่าเป็นองค์ประกอบโครงสร้างที่หมายถึงระดับนามธรรมมากขึ้นจากมุมมองของสถาปัตยกรรมซอฟต์แวร์และจากระดับนามธรรมมากขึ้น ในแง่นี้หากมีการกำหนดคลาสนามธรรมและจุดประสงค์คือการบรรลุความหลากหลายฉันคิดว่ามันสมเหตุสมผลที่จะเรียกคลาสนามธรรมนี้ด้วย "อินเทอร์เฟซ" แต่มันสมเหตุสมผลหรือไม่ที่จะใช้คลาสนามธรรมเพื่อใช้ polymorphism? อภิปรายในบทความที่สองด้านล่าง
โดยสรุปฉันคิดว่าแนวคิดของ "อินเทอร์เฟซ" สองตัวนั้นแตกต่างกันและเกี่ยวข้องกัน อินเทอร์เฟซใน "การเขียนโปรแกรมเชิงอินเตอร์เฟส" เป็นส่วนประกอบทางสถาปัตยกรรมในระดับอุดมการณ์สำหรับการตระหนักถึงความหลากหลายการปรับปรุงความยืดหยุ่นของซอฟต์แวร์และการบำรุงรักษาในขณะที่ "อินเทอร์เฟซ" ในภาษาเฉพาะเป็นวิธีการใช้ส่วนประกอบในแนวคิดนี้เป็นรหัส
2. เกี่ยวกับคลาสนามธรรมและอินเทอร์เฟซ
ฉันเห็นว่านี่เป็นปัญหาที่รุนแรงมากขึ้นในการตอบกลับ ขออภัยฉันคิดไม่ค่อยดีเกี่ยวกับปัญหานี้ในบทความ ความเข้าใจส่วนตัวของฉันเกี่ยวกับปัญหานี้มีดังนี้:
หากเราดูรหัสเฉพาะเพียงอย่างเดียวแนวคิดทั้งสองนี้ง่ายต่อการเบลอและเรายังคิดว่าอินเทอร์เฟซนั้นซ้ำซ้อนเพราะจากฟังก์ชั่นเฉพาะเพียงอย่างเดียวยกเว้นการสืบทอดหลายครั้ง (C#, ใน Java) คลาสนามธรรมดูเหมือนจะสามารถแทนที่อินเทอร์เฟซได้อย่างสมบูรณ์ อย่างไรก็ตามการมีอยู่ของอินเทอร์เฟซเพื่อให้ได้มาหลายครั้งหรือไม่? ไม่แน่นอน ฉันคิดว่าความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซคือแรงจูงใจในการใช้งาน การใช้คลาสนามธรรมสำหรับการใช้รหัสซ้ำในขณะที่แรงจูงใจในการใช้อินเทอร์เฟซสำหรับ polymorphism ดังนั้นหากคุณลังเลว่าจะใช้อินเทอร์เฟซหรือคลาสนามธรรมที่ไหนสักแห่งคุณสามารถคิดเกี่ยวกับแรงจูงใจของคุณ
การเห็นข้อสงสัยของเพื่อนเกี่ยวกับอินเทอร์เฟซ Iperson ความเข้าใจส่วนตัวของฉันคือการกำหนดอินเทอร์เฟซของ Iperson นั้นขึ้นอยู่กับแอปพลิเคชันเฉพาะหรือไม่ หากมีผู้หญิงและผู้ชายในโครงการของเราทั้งบุคคลที่ได้รับมรดกและวิธีการส่วนใหญ่ของผู้หญิงและผู้ชายเหมือนกันและมีเพียงวิธีเดียวเท่านั้น dosomethinginwc () จะแตกต่างกัน (ตัวอย่างคือหยาบคายโปรดให้อภัยฉัน) แน่นอน รหัสซ้ำ
อย่างไรก็ตามหากชั้นเรียนผู้หญิงและผู้ชายในโปรแกรมของเราโดยทั่วไปไม่มีรหัสทั่วไปและมีชั้นเรียน personhandle ที่ต้องการสร้างอินสแตนซ์พวกเขาและไม่ต้องการที่จะรู้ว่าพวกเขาเป็นผู้ชายหรือผู้หญิง แต่เพียงแค่ปฏิบัติต่อพวกเขาในฐานะมนุษย์และใช้ polymorphism
ในระยะสั้นความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรมส่วนใหญ่เกิดจากแรงจูงใจในการใช้งานไม่ใช่ตัวเอง เมื่อสิ่งใดควรถูกกำหนดให้เป็นคลาสนามธรรมหรืออินเทอร์เฟซจะต้องพิจารณาตามบริบทของสภาพแวดล้อมที่เฉพาะเจาะจง
นอกจากนี้ฉันคิดว่าความแตกต่างอีกอย่างหนึ่งระหว่างอินเทอร์เฟซและคลาสนามธรรมคือควรมีความสัมพันธ์ทั่วไปและพิเศษระหว่างคลาสนามธรรมและคลาสย่อยในขณะที่อินเทอร์เฟซเป็นเพียงชุดของกฎที่ควรใช้ (แน่นอนอาจมีความสัมพันธ์ทั่วไปและพิเศษ แต่จุดประสงค์ของการใช้อินเทอร์เฟซของเราไม่ได้อยู่ที่นี่) ตัวอย่างเช่นเป็นที่ยอมรับในการกำหนดยานพาหนะเป็นคลาสนามธรรมและรถยนต์เครื่องบินและเรือเป็นคลาสย่อยเพราะรถยนต์เครื่องบินและเรือเป็นยานพาหนะพิเศษทั้งหมด ตัวอย่างเช่นอินเทอร์เฟซ iComparable เพียงแค่บอกว่าคลาสที่ใช้งานอินเทอร์เฟซนี้จะต้องสามารถเปรียบเทียบได้ซึ่งเป็นกฎ หากคลาสรถใช้ iComparable มันก็หมายความว่ามีวิธีในรถของเราในการเปรียบเทียบสองอินสแตนซ์รถยนต์ซึ่งอาจมีราคาแพงกว่ารถคันไหนหรือใหญ่กว่ารถคันไหน มันไม่สำคัญ แต่เราไม่สามารถพูดได้ว่า "รถยนต์มีความพิเศษและสามารถเปรียบเทียบได้" ซึ่งไม่สามารถใช้ได้กับไวยากรณ์
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน