บทความนี้อธิบายถึงการใช้อินเทอร์เฟซและคลาสนามธรรมใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ในแนวคิดเชิงวัตถุเรารู้ว่าวัตถุทั้งหมดถูกอธิบายโดยคลาส แต่ไม่ใช่ทุกคลาสที่ใช้เพื่ออธิบายวัตถุ หากคลาสไม่มีข้อมูลเพียงพอที่จะอธิบายวัตถุคอนกรีตคลาสดังกล่าวเป็นคลาสนามธรรม
คลาสนามธรรมมักใช้เพื่อแสดงแนวคิดนามธรรมที่เราได้รับในการวิเคราะห์และออกแบบฟิลด์ปัญหา พวกเขาเป็นนามธรรมของชุดแนวคิดคอนกรีตที่ดูเหมือนแตกต่างกัน แต่ก็เหมือนกัน เราไม่สามารถสร้างอินสแตนซ์พวกเขาได้ (ไม่สามารถหาสิ่งที่เป็นรูปธรรมได้) ดังนั้นเราจึงเรียกพวกเขาว่า abstractions
ตัวอย่างเช่น: เมื่อเราต้องการอธิบาย "ผลไม้" มันเป็นนามธรรม มันมีลักษณะทั่วไปบางอย่างเช่นมวลและปริมาตร (ผลไม้มีมวล) แต่ไม่มีลักษณะ (แอปเปิ้ลและส้มเป็นผลไม้และพวกเขามีลักษณะของตัวเอง) เราไม่สามารถหาสิ่งเดียวที่สามารถเป็นตัวแทนของผลไม้ได้ (เพราะแอปเปิ้ลและส้มไม่สามารถเป็นตัวแทนของผลไม้ได้) คลาสนามธรรมสามารถใช้เพื่ออธิบายได้ดังนั้นคลาสนามธรรมจึงไม่สามารถสร้างอินสแตนซ์ได้ เมื่อเราใช้คลาสที่แน่นอนเพื่ออธิบาย "แอปเปิ้ล" คลาสนี้สามารถสืบทอดคลาสนามธรรมที่อธิบาย "ผลไม้" เราทุกคนรู้ว่า "แอปเปิ้ล" เป็น "ผลไม้" ชนิดหนึ่ง
ในฟิลด์เชิงวัตถุคลาสนามธรรมส่วนใหญ่จะใช้สำหรับการซ่อนประเภท เราสามารถสร้างคำอธิบายที่เป็นนามธรรมคงที่ของชุดพฤติกรรม แต่ชุดของพฤติกรรมนี้สามารถมีวิธีการใช้งานที่เป็นไปได้ที่เป็นไปได้ คำอธิบายที่เป็นนามธรรมนี้เป็นคลาสที่เป็นนามธรรมและชุดของการใช้งานคอนกรีตที่เป็นไปได้นี้จะปรากฏเป็นคลาสที่ได้รับทั้งหมดของคลาสนามธรรมนี้
วิธีการนามธรรมทั้งหมดในอินเทอร์เฟซและคลาสนามธรรมไม่สามารถนำไปใช้ในการใช้งานที่เป็นรูปธรรม แต่ควรใช้วิธีการนามธรรมทั้งหมดในคลาสย่อยของพวกเขา (ต้องมีร่างกายฟังก์ชั่นแม้ว่ามันจะว่างเปล่าใน {}) นักออกแบบ Java อาจพิจารณาถึงความยืดหยุ่นของวิธีการนามธรรมและแต่ละคลาสย่อยสามารถใช้วิธีการนามธรรมตามความต้องการของตนเอง
คำจำกัดความของคลาสนามธรรมมีดังนี้:
บทคัดย่อระดับสาธารณะบทคัดย่อคลาสนามธรรม // มีวิธีนามธรรมอย่างน้อยหนึ่งวิธีในนั้น {public int t; // ข้อมูลสามัญสมาชิกโมฆะนามธรรมสาธารณะวิธีการ 1 (); // วิธีนามธรรม, คลาสย่อยของคลาสนามธรรมต้องใช้วิธีการนามธรรมในคลาสนามธรรมในคลาสโมฆะนามธรรมนามธรรมสาธารณะ (); โมฆะสาธารณะวิธีการ 3 (); // วิธีการที่ไม่ใช่วิธีการสาธารณะวิธีการสาธารณะ 4 (); public int method4 () {... // คลาสนามธรรมสามารถกำหนดพฤติกรรมเริ่มต้นของวิธีการที่ไม่ได้ใช้วิธีการนั่นคือการใช้งานที่เป็นรูปธรรมของวิธีการ} โมฆะสาธารณะวิธีการสาธารณะ 3 () {... // คลาสนามธรรมสามารถกำหนดพฤติกรรมเริ่มต้นของวิธีการที่ไม่ใช่วิธีการคำจำกัดความของอินเทอร์เฟซมีดังนี้:
อินเทอร์เฟซอินเตอร์เฟสสาธารณะ {int final final int i; // ไม่สามารถมีสมาชิกข้อมูลทั่วไปในอินเทอร์เฟซเฉพาะสมาชิกข้อมูลคงที่ที่ไม่สามารถแก้ไขได้ หมายถึงค่าเฉลี่ยทั่วโลกวิธีสุดท้ายไม่สามารถแก้ไขได้ มันสามารถแก้ไขได้โดยไม่ต้องมีการดัดแปลงขั้นสุดท้ายและจะได้รับการประกาศโดยนัยว่าเป็นโมฆะแบบคงที่และเป็นโมฆะขั้นสุดท้าย (); // วิธีการในอินเทอร์เฟซจะต้องเป็นวิธีนามธรรมดังนั้นวิธีการโมฆะสาธารณะ () ไม่จำเป็นต้องมีการดัดแปลงนามธรรม // พฤติกรรมเริ่มต้นของวิธีการไม่สามารถกำหนดให้กับอินเทอร์เฟซนั่นคือไม่สามารถใช้วิธีการเฉพาะของวิธี}ในระยะสั้นคลาสนามธรรมเป็นคลาสที่ไม่สมบูรณ์และอินเทอร์เฟซเป็นเพียงคอลเลกชันของการประกาศวิธีการนามธรรมและข้อมูลคงที่ที่ไม่สามารถแก้ไขได้ซึ่งไม่สามารถสร้างอินสแตนซ์ได้
ในแง่หนึ่งอินเทอร์เฟซเป็นรูปแบบพิเศษของคลาสนามธรรม ในภาษา Java คลาสนามธรรมแสดงถึงความสัมพันธ์ในการสืบทอด คลาสสามารถสืบทอดคลาสนามธรรมหนึ่งคลาสเท่านั้นในขณะที่คลาสสามารถใช้หลายอินเทอร์เฟซ ในหลายกรณีอินเทอร์เฟซสามารถแทนที่คลาสนามธรรมได้อย่างแน่นอนหากคุณไม่จำเป็นต้องแสดงการสืบทอดมรดกบนแอตทริบิวต์โดยเจตนา
เพื่อให้เข้าใจเพิ่มเติมเพื่อจุดประสงค์ในการแนะนำคลาสนามธรรมและอินเทอร์เฟซคำตอบที่ฉันได้รับจากผู้เชี่ยวชาญมีดังนี้:
1. จากมุมมองของลำดับชั้นของคลาสคลาสนามธรรมอยู่ที่ด้านบนของระดับ แต่ในการออกแบบจริงคลาสนามธรรมควรปรากฏขึ้นในภายหลัง ทำไม ในความเป็นจริงการได้มาของคลาสนามธรรมเป็นเหมือนการแยกปัจจัยทั่วไปในคณิตศาสตร์: AX+BX, X เป็นคลาสนามธรรม หากคุณไม่มีสูตรก่อนหน้านี้คุณจะรู้ได้อย่างไรว่า X เป็นปัจจัยทั่วไปหรือไม่ ในเรื่องนี้มันยังสอดคล้องกับกระบวนการของผู้คนในการทำความเข้าใจโลกคอนกรีตแรกและจากนั้นเป็นนามธรรม ดังนั้นหากคุณได้รับแนวคิดที่เฉพาะเจาะจงและค้นหา commonalities ในกระบวนการออกแบบมันควรจะเป็นความจริงที่คอลเลกชันของ commonalities นี้เป็นคลาสนามธรรม
2. บนพื้นผิวอินเทอร์เฟซคล้ายกับคลาสนามธรรมมาก แต่การใช้งานนั้นแตกต่างกันอย่างสิ้นเชิง ฟังก์ชั่นพื้นฐานของมันคือการรวบรวมคลาสที่ไม่เกี่ยวข้อง (แนวคิด) เข้าด้วยกันเพื่อสร้าง "คลาสใหม่" ที่ใช้งานได้จากส่วนกลาง ตัวอย่างทั่วไปที่ฉันให้กับนักเรียนคือ "คนขับ" ใครสามารถเป็นคนขับได้? ทุกคนสามารถทำได้ตราบใดที่คุณได้รับใบขับขี่ ดังนั้นฉันจึงไม่สนใจว่าคุณเป็นนักเรียนคนงานปกขาวคนงานปกสีน้ำเงินหรือเจ้านายตราบใดที่คุณมีใบขับขี่คุณเป็นคนขับ
Interface Driverlicence {ใบอนุญาต getLicence (); } ชั้นเรียนนักเรียนขยายนักเรียนใช้งาน Driverlicence {} ชั้นเรียน whtiecollaremployeedriver ขยาย whtiecollaremployee ใช้ driverlicence {} คลาส bluecollaremployeedriver ขยาย bluecollaremployee ดำเนินการ driverlicence {} bossdriverเมื่อฉันกำหนดคลาส "Car" ฉันสามารถระบุ "ไดรเวอร์" ได้
รถคลาส {setDriver (ไดรเวอร์ Driverlicence);}ในเวลานี้วัตถุของรถยนต์ไม่สนใจว่าคนขับทำอะไร ประเด็นทั่วไปเพียงอย่างเดียวของพวกเขาคือพวกเขาได้รับใบขับขี่ นี่ควรเป็นส่วนที่ทรงพลังที่สุดของอินเทอร์เฟซและไม่มีที่เปรียบได้กับคลาสนามธรรม
สรุป:
คลาสบทคัดย่อแยกปัจจัยร่วมกันของคลาสคอนกรีตในขณะที่อินเทอร์เฟซคือ "แฮช" คลาสที่ไม่เกี่ยวข้องบางส่วนในกลุ่มทั่วไป โดยปกติเราจะพัฒนานิสัยที่ดีในการใช้หลายอินเทอร์เฟซ ท้ายที่สุดแล้ว Java เป็นมรดกเดียวซึ่งแตกต่างจาก C ++ แต่จะต้องใช้เมื่อใช้คลาสนามธรรม (ค่อนข้างคล้ายกับ Goto) ฮ่าฮ่า
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน