แนวคิดและการใช้งานของอินเทอร์เฟซ Java <br /> ในคลาสนามธรรมสามารถรวมวิธีนามธรรมหนึ่งวิธีขึ้นไปได้
คำหลักของอินเตอร์เฟสได้รับการประกาศซึ่งถือได้ว่าเป็นคลาสนามธรรมพิเศษที่ระบุสิ่งที่คลาสต้องทำแทนที่จะระบุว่ามันเป็นอย่างไร
นอกจากนี้ยังมีตัวอย่างมากมายของอินเทอร์เฟซในความเป็นจริงเช่นฮาร์ดไดรฟ์คอมพิวเตอร์อนุกรม คณะกรรมการ ATA อนุกรมไม่รับผิดชอบในการผลิตฮาร์ดไดรฟ์ แต่ระบุเฉพาะข้อกำหนดทั่วไป
Seagate, Hitachi, Samsung และผู้ผลิตรายอื่นจะผลิตฮาร์ดดิสก์ที่ตรงกับอินเทอร์เฟซตามข้อกำหนดและฮาร์ดดิสก์เหล่านี้สามารถสรุปได้ 320G SEAGATE SERIAL DISK และติดตั้ง
รหัสต่อไปนี้สามารถจำลองคณะกรรมการ ATA อนุกรมเพื่อกำหนดอินเตอร์เฟสฮาร์ดดิสก์อนุกรมต่อไปนี้:
// อินเทอร์เฟซฮาร์ดดิสก์แบบอนุกรม SATAHDD {// จำนวนสายการเชื่อมต่อสาธารณะคงที่ int connect_line = 4 // เขียนข้อมูลสาธารณะ voidata (ข้อมูลสตริง);หมายเหตุ: ตัวแปรสมาชิกที่ประกาศในอินเทอร์เฟซเป็นแบบคงที่สาธารณะทั้งหมดโดยค่าเริ่มต้นและจะต้องแสดงการเริ่มต้น ดังนั้นตัวดัดแปลงเหล่านี้สามารถละเว้นได้เมื่อประกาศค่าคงที่
อินเทอร์เฟซเป็นคอลเลกชันของค่าคงที่และวิธีการนามธรรมหลายวิธีซึ่งในปัจจุบันดูเหมือนจะคล้ายกับคลาสนามธรรม อันที่จริงอินเทอร์เฟซพัฒนามาจากคลาสนามธรรมดังนั้นหากไม่ได้ระบุไว้เป็นอย่างอื่นอินเทอร์เฟซจะเพลิดเพลินไปกับ "การรักษา" เช่นเดียวกับคลาส ตัวอย่างเช่นคลาสหรืออินเทอร์เฟซหลายคลาสสามารถกำหนดได้ในโปรแกรมต้นทาง แต่ส่วนใหญ่หนึ่งคลาสสาธารณะหรืออินเตอร์เฟสสามารถใช้ได้ เช่นเดียวกับรูปแบบการสืบทอดของคลาสอินเทอร์เฟซยังสามารถสืบทอดได้และอินเตอร์เฟซย่อยสามารถสืบทอดค่าคงที่และวิธีการนามธรรมในอินเทอร์เฟซหลักและเพิ่มวิธีนามธรรมใหม่ ฯลฯ
อย่างไรก็ตามอินเทอร์เฟซมีลักษณะของตัวเองสรุปดังนี้
1) เฉพาะวิธีการนามธรรมเท่านั้นที่สามารถกำหนดได้ในอินเทอร์เฟซ การพยายามกำหนดตัวแปรอินสแตนซ์วิธีการอินสแตนซ์ที่ไม่ได้รับการรับรองและวิธีการคงที่ในอินเทอร์เฟซนั้นผิดกฎหมายทั้งหมด ตัวอย่างเช่น:
อินเทอร์เฟซสาธารณะ SATAHDD {// จำนวนสายการเชื่อมต่อ INT CONNECTLINE สาธารณะ; เป็น Public Type // Data String String สาธารณะ readdata () {// การรวบรวมข้อผิดพลาดอินเตอร์เฟสไม่สามารถมีวิธีการส่งคืนแบบสแตติก "ข้อมูล";3) ไม่มีตัวสร้างในอินเทอร์เฟซและไม่สามารถสร้างอินสแตนซ์ได้
4) อินเทอร์เฟซหนึ่งไม่ใช้อินเทอร์เฟซอื่น แต่สามารถสืบทอดอินเทอร์เฟซอื่น ๆ ได้หลายอย่าง คุณลักษณะหลายส่วนของอินเทอร์เฟซประกอบขึ้นสำหรับการสืบทอดเดี่ยวของคลาส ตัวอย่างเช่น:
// อินเทอร์เฟซฮาร์ดดิสก์ต่อเนื่องแบบอนุกรม SATAHDD ขยาย A, B {// จำนวนสายการเชื่อมต่อสาธารณะคงที่ int connect_line = 4 // เขียนข้อมูลสาธารณะเป็นโมฆะ writedata (ข้อมูลสตริง); ;ทำไมต้องใช้อินเทอร์เฟซ
ในการพัฒนาโครงการขนาดใหญ่อาจจำเป็นต้องแทรกชั้นเรียนจากช่วงกลางของห่วงโซ่การสืบทอดเพื่อให้คลาสย่อยของมันมีฟังก์ชั่นบางอย่างโดยไม่ส่งผลกระทบต่อชั้นเรียนหลักของพวกเขา ตัวอย่างเช่น A -> B -> C -> D -> E, A เป็นคลาสบรรพบุรุษ ระดับ. แต่ปัญหาคือ Java เป็นภาษามรดกเดียว ด้วยวิธีนี้การปรับเปลี่ยนคลาส C, D และ E ส่งผลกระทบต่อห่วงโซ่การสืบทอดทั้งหมดและไม่สามารถทำได้
อินเทอร์เฟซเป็นการรับประกันความสามารถในการแทรก คลาสใด ๆ ในห่วงโซ่การสืบทอดสามารถใช้อินเทอร์เฟซซึ่งจะส่งผลกระทบต่อคลาสย่อยทั้งหมดของคลาสนี้ แต่จะไม่ส่งผลกระทบต่อคลาสแม่ของคลาสนี้ คลาสดังกล่าวจะต้องใช้วิธีการที่ระบุโดยอินเทอร์เฟซนี้และคลาสย่อยสามารถสืบทอดวิธีการเหล่านี้จากคลาสนี้โดยอัตโนมัติและในเวลานี้คลาสย่อยเหล่านี้สามารถทำได้
สิ่งที่เราสนใจไม่ใช่คลาสเฉพาะ แต่ไม่ว่าจะเป็นคลาสนี้ใช้อินเทอร์เฟซที่เราต้องการ
อินเทอร์เฟซให้การแก้ไขและการเรียกวิธีการที่ใหญ่ขึ้น
อินเตอร์เฟสมีบทบาทสำคัญในการเขียนโปรแกรม Java เชิงวัตถุ ในความเป็นจริงหนึ่งในภารกิจที่สำคัญที่สุดในขั้นตอนการออกแบบคือการออกแบบอินเทอร์เฟซของแต่ละส่วนจากนั้นสร้างโครงสร้างกรอบพื้นฐานของโปรแกรมผ่านการรวมกันของอินเทอร์เฟซ
การใช้อินเทอร์เฟซ
การใช้อินเทอร์เฟซค่อนข้างแตกต่างจากคลาส ในกรณีที่คุณต้องใช้คลาสคำหลักใหม่จะถูกใช้โดยตรงเพื่อสร้างอินสแตนซ์ของคลาส แต่ไม่สามารถใช้อินเทอร์เฟซเช่นนี้ได้เนื่องจากอินเทอร์เฟซไม่สามารถใช้คำหลักใหม่โดยตรงเพื่อสร้างอินสแตนซ์
อินเทอร์เฟซจะต้องใช้วิธีการนามธรรมผ่านคลาสแล้วสร้างอินสแตนซ์คลาส คำสำคัญของอินเทอร์เฟซการใช้งานคลาสคือการใช้งาน
หากคลาสไม่สามารถใช้วิธีการนามธรรมทั้งหมดของอินเทอร์เฟซได้คลาสจะต้องถูกกำหนดเป็นวิธีนามธรรม
อินสแตนซ์ของอินเทอร์เฟซไม่ได้รับอนุญาตให้สร้าง แต่ตัวแปรอ้างอิงของประเภทอินเตอร์เฟสได้รับอนุญาตให้กำหนดซึ่งชี้ไปที่อินสแตนซ์ของคลาสที่ใช้อินเทอร์เฟซ
คลาสสามารถสืบทอดคลาสพาเรนต์เดียวเท่านั้น แต่สามารถใช้หลายอินเทอร์เฟซ
รูปแบบของอินเทอร์เฟซการใช้งานมีดังนี้:
ชื่อคลาสคลาส Modifier ขยายคลาสพาเรนต์ใช้หลายอินเตอร์เฟส {
วิธีการดำเนินการ
-
โปรดดูตัวอย่างต่อไปนี้:
นำเข้า java.lang.system.*; การสาธิตระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {satahdd sh1 = seagatehdd ใหม่ (); ฮาร์ดดิสก์ Samsung}} // อินเตอร์เฟสฮาร์ดดิสก์อนุกรม SATAHDD {// จำนวนสายการเชื่อมต่อสาธารณะคงที่ int connect_line = 4 // เขียนข้อมูลสาธารณะ Writedata (ข้อมูลสตริง); ;}// ซ่อมแซมฮาร์ดดิสก์อินเตอร์เฟส fixhdd {// address address address = "Haidian District, ปักกิ่ง"; readdata () {return "data";} // ฮาร์ดไดรฟ์ Seagate writedata (ข้อมูลสตริง) {out.println ("เขียนสำเร็จ"); // คลาสฮาร์ดไดรฟ์ Samsung Samsunghdd ใช้ satahdd {// ฮาร์ดไดรฟ์ฮาร์ดไดรฟ์ Samsung Readdata () {return "data"; ฮาร์ดดิสก์คุณภาพไม่ดีไม่สามารถเขียนข้อมูลบทคัดย่อ XXHDD ใช้ SATAHDD {// ฮาร์ดดิสก์อ่านข้อมูลสตริงสาธารณะ readdata () {return "ข้อมูล";}}}ใช้อินเทอร์เฟซเป็นประเภท
อินเทอร์เฟซถูกใช้เป็นประเภทการอ้างอิง ตรวจสอบว่าควรเป็นวิธีการคลาสที่ใช้จริง ๆ แล้วเรียกวิธีการใช้งานคลาสที่สอดคล้องกัน
ตัวอย่างมีดังนี้:
การสาธิตระดับสาธารณะ {โมฆะสาธารณะ test1 (a) {a.dosth (); a);}} อินเตอร์เฟส A {public int dosth (); ผลการทำงาน:
ตอนนี้ใน B
อย่างที่คุณเห็นอินเตอร์เฟสสามารถใช้เป็นประเภทโดยใช้อินเทอร์เฟซเป็นพารามิเตอร์วิธีการและประเภทการส่งคืน
ความแตกต่างระหว่างอินเทอร์เฟซ Java และคลาสนามธรรม <br /> คลาสคือเทมเพลตวัตถุและคลาสนามธรรมและอินเตอร์เฟสถือได้ว่าเป็นเทมเพลตของคลาสคอนกรีต
เนื่องจากจากมุมมองที่แน่นอนอินเทอร์เฟซเป็นคลาสนามธรรมพิเศษพวกเขามีการเชื่อมต่อที่ลึกและมีความคล้ายคลึงกันมากดังนั้นจึงเป็นเรื่องง่ายที่จะสับสนเกี่ยวกับผู้ที่จะใช้ ก่อนอื่นเราวิเคราะห์ความคล้ายคลึงกันที่พวกเขามี
พวกเขาทั้งหมดเป็นตัวแทนของชั้นนามธรรมของโครงสร้างเหมือนต้นไม้ เมื่อใช้ตัวแปรอ้างอิงลองใช้เลเยอร์นามธรรมของโครงสร้างคลาสเพื่อแยกคำจำกัดความและการใช้งานของวิธีการนี้
ไม่มีใครสามารถสร้างอินสแตนซ์ได้
ทั้งหมดสามารถมีวิธีนามธรรม วิธีการนามธรรมใช้เพื่ออธิบายฟังก์ชั่นที่ระบบจัดเตรียมโดยไม่ต้องใส่ใจเกี่ยวกับการใช้งานที่เฉพาะเจาะจง
มาพูดคุยเกี่ยวกับความแตกต่างหลักระหว่างคลาสนามธรรมและอินเทอร์เฟซ
1) คลาสนามธรรมสามารถให้การใช้งานสำหรับวิธีการบางอย่างหลีกเลี่ยงการใช้งานซ้ำ ๆ ของวิธีการเหล่านี้ในคลาสย่อยและการปรับปรุงความสามารถในการใช้ซ้ำของรหัส
Public Abstract Class A {Public นามธรรมโมฆะวิธีการ 1 (); Method1 () {// C Method1}}Abstract Class A มีสองคลาสย่อย B และ C เนื่องจาก A มีการใช้วิธีการ Method2 ในนั้นวิธีการ Method2 ไม่จำเป็นต้องเขียนใหม่ในคลาสย่อย B และ C เราบอกว่า A ให้ฟังก์ชั่นสาธารณะสำหรับคลาสย่อยหรือ จำกัด มัน . พฤติกรรมของคลาสย่อย Method2 เป็นตัวอย่างของรหัสที่ใช้ซ้ำได้ A ไม่ได้กำหนดการใช้วิธีการที่ 1 นั่นคือ B และ C สามารถใช้วิธีการวิธีการที่เป็นวิธีการตามลักษณะของตัวเองซึ่งสะท้อนถึงลักษณะของการมีเพศสัมพันธ์แบบหลวม
เปลี่ยนเป็นอินเทอร์เฟซและดู:
อินเทอร์เฟซสาธารณะ A {โมฆะสาธารณะวิธีการ 1 (); ใช้ {โมฆะสาธารณะวิธีการ 1 () {// c method1} โมฆะสาธารณะ method2 () {// c method2}}}อินเทอร์เฟซ A ไม่สามารถให้ฟังก์ชั่นสาธารณะสำหรับการใช้คลาส B และ C ซึ่งหมายความว่า A ไม่สามารถ จำกัด พฤติกรรมของ B และ C B และ C สามารถออกแรงคุณลักษณะและวิธีการที่เป็นจริงและวิธีการที่เป็นจริงได้อย่างอิสระและอินเทอร์เฟซ A ไม่มีความสามารถในการควบคุม
2) คลาสสามารถสืบทอดคลาสหลักโดยตรง (อาจเป็นคลาสนามธรรม) แต่คลาสสามารถใช้หลายอินเทอร์เฟซซึ่งเป็นข้อได้เปรียบของอินเทอร์เฟซ
อินเทอร์เฟซ A {โมฆะสาธารณะวิธีการ 2 ();} อินเตอร์เฟส b {โมฆะสาธารณะวิธีการ 1 ();} คลาส C ใช้ A, B {โมฆะสาธารณะวิธีการ 1 () {// C Method1} publ IC Void Method2 () {// C Method2}} } // C สามารถใช้งานได้อย่างยืดหยุ่นและ C มีโอกาสที่จะขยายและใช้อินเทอร์เฟซอื่น ๆ a = new C (); Class B ขยาย {public abstract void method2 ();} คลาส C ขยาย b {โมฆะสาธารณะวิธีการ 1 () {// c method1} โมฆะสาธารณะ method2 () {// c method2}}}สำหรับคลาส C จะไม่มีโอกาสได้รับมรดกชั้นเรียนอื่น ๆ
เพื่อสรุปการเชื่อมต่อและคลาสนามธรรมมีข้อดีและข้อเสียของตนเอง
แบบจำลองพฤติกรรมควรถูกกำหนดผ่านอินเทอร์เฟซมากกว่าคลาสนามธรรมดังนั้นอินเทอร์เฟซมักจะเป็นที่ต้องการและควรใช้คลาสนามธรรมให้น้อยที่สุดเท่าที่จะทำได้
เมื่อเลือกคลาสนามธรรมมักจะเป็นสถานการณ์ต่อไปนี้: คุณต้องกำหนดพฤติกรรมของคลาสย่อยและให้ฟังก์ชั่นทั่วไปสำหรับคลาสย่อย