' อินเตอร์เฟซ เป็นขั้นสูงในการบรรลุนามธรรมในภาษาการเขียนโปรแกรม Java อินเทอร์เฟซ Java ช่วยใน ลดความซับซ้อน ในรหัสและทำให้ไฟล์ ความสามารถในการอ่าน . ในบทความนี้ฉันจะอธิบายให้คุณทราบเกี่ยวกับ Java Interface ผ่านเอกสารต่อไปนี้
- Java Interface คืออะไร?
- ทำไมเราต้องมีอินเทอร์เฟซ?
- การประกาศ Java Interface: Syntax
- ตัวอย่างอินเตอร์เฟส Java
- การซ้อนอินเทอร์เฟซ Java
- ความแตกต่างระหว่างคลาสและอินเทอร์เฟซ
- ข้อดีและข้อเสียของอินเทอร์เฟซ
- ประเด็นสำคัญบนอินเตอร์เฟส Java
Java Interface คืออะไร?
อินเตอร์เฟซคอมพิวเตอร์ เรียกได้ว่าเป็นเขตแดนที่แยกระบบตั้งแต่สองระบบขึ้นไป แลกเปลี่ยนข้อมูลระหว่างส่วนประกอบในระบบซึ่งสามารถส่งสัญญาณคำสั่งหรือโปรโตคอล
Java Abstraction จัดเตรียมฟังก์ชันการทำงานของวิธีการเฉพาะโดยซ่อนลอจิกการนำไปใช้งานที่เขียนไว้ในเมธอด ในทำนองเดียวกัน Java Interface ยังเป็น Abstract Class ซึ่งรวมถึง Method Declaration แต่ไม่ใช่คำจำกัดความ ห้องเรียน ดำเนินการ อินเทอร์เฟซเพื่อสืบทอดวิธีนามธรรม นอกเหนือจากวิธีการที่เป็นนามธรรมแล้ว an อินเตอร์เฟซ ยังสามารถรวม ค่าคงที่วิธีการแบบคงที่อินเทอร์เฟซที่ซ้อนกัน และ วิธีการเริ่มต้น
ความคล้ายคลึงกันระหว่างคลาสและอินเทอร์เฟซ
อินเทอร์เฟซคล้ายกับคลาสปกติใน Java โดยสิ้นเชิง อินเทอร์เฟซประกอบด้วยวิธีการที่เป็นนามธรรมและวิธีการเหล่านี้ได้รับการออกแบบมาเพื่อใช้งาน กระบวนการนี้เท่ากับการถ่ายทอดทางพันธุกรรมซึ่งเป็นเรื่องปกติเมื่อพูดถึงชั้นเรียน เราจะพูดคุยเพิ่มเติมเกี่ยวกับความคล้ายคลึงกัน
- เช่นเดียวกับคลาสอินเทอร์เฟซสามารถมีเมธอดได้มากตามต้องการ
- เช่นเดียวกับคลาสอินเทอร์เฟซยังเขียนด้วย .java ไฟล์นามสกุล.
- น่าแปลกใจที่ไบต์โค้ดสำหรับอินเทอร์เฟซจะปรากฏในไฟล์ .class ไฟล์.
- อินเทอร์เฟซจะแสดงในรูปแบบของแพ็กเกจและ bytecode ตามลำดับอยู่ในไดเร็กทอรีที่ตรงกับชื่อแพ็กเกจ
ทำไมเราต้องมีอินเทอร์เฟซ?
Java ไม่รองรับ มรดกหลายรายการ ด้วยเหตุนี้จึงไม่อนุญาตให้คลาสขยายมากกว่าหนึ่งคลาสในอินสแตนซ์ ชั้นเรียนเด็ก ไม่สามารถสืบทอดคุณสมบัติของ ผู้ปกครองหลายชั้น ในอินสแตนซ์เดียวตามผลลัพธ์ ปัญหาเพชร. เพื่อเอาชนะปัญหานี้ อินเตอร์เฟซ ได้รับการแนะนำ ให้เราเข้าใจปัญหานี้ผ่านตัวอย่าง
สมมติว่าเรามีเครื่องบินสองลำลำหนึ่งบรรทุกได้เท่านั้น ผู้โดยสาร, อีกอันเท่านั้น ตำแหน่ง. ตอนนี้เราจำเป็นต้อง สืบทอด คุณสมบัติของทั้งเครื่องบินบรรทุกสินค้าและเครื่องบินโดยสาร Java จะไม่รองรับโซลูชันนี้เนื่องจากลงท้ายด้วย ความคลุมเครือ ระหว่างเครื่องบินสองลำ
แต่ถ้าคุณสามารถทำให้เป็นไปได้โดยทำให้ Java รู้สึกว่ามันสืบทอดระนาบเดียวและ การนำไปใช้ วิธีการที่มีอยู่ในระนาบอื่น เปรียบเสมือนเครื่องบินพาณิชย์ที่รับผู้โดยสารและสัมภาระ อินเทอร์เฟซเหมือนกับการสร้างระนาบที่ใหญ่ขึ้นซึ่งสามารถทำงานทั้งสองอย่างได้โดยไม่รบกวนส่วนประกอบของกันและกัน แต่เพียงแค่ยืมวิธีการจาก คลาสอินเทอร์เฟซ
// รหัสคลาส A
แพ็กเกจหลายคลาส A {void msg () {System.out.println ('Hello')}}
// รหัสคลาส B
แพ็กเกจหลายคลาส B {void msg () {System.out.println ('Welcome')}}
รหัสคลาส C
แพ็กเกจหลายคลาส C ขยาย A, B {// สิ่งนี้จะไม่ได้รับการยอมรับจาก Java มันจะทำให้เกิดข้อผิดพลาดและโค้ดจะไม่ถูกเรียกใช้งาน โมฆะคงที่สาธารณะ main (String args []) {C obj = new C () obj.msg ()}}
เอาท์พุต:
ข้อผิดพลาด แนวทางเฉพาะนี้ทำให้เกิดข้อยกเว้น Java ไม่รองรับการสืบทอดหลายรายการ ข้อผิดพลาดนี้เรียกว่า ปัญหาเพชร
ให้เราลองใช้วิธีแก้ปัญหาโดยใช้อินเทอร์เฟซ ชั้นเรียนเด็ก สามารถเข้าถึงวิธีการจาก ผู้ปกครองหลายคน เรียนในอินสแตนซ์เดียว
// รหัสอินเทอร์เฟซ
วิธีสร้างแพ็คเกจใน java
แพคเกจโซลูชันอินเทอร์เฟซสาธารณะ MIS {โมฆะสาธารณะสวัสดี () โมฆะสาธารณะยินดีต้อนรับ ()}
// รหัสชั้นเรียน
package MIS public class classA ใช้โซลูชัน {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('ยินดีต้อนรับสู่ Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}
เอาท์พุต:
สวัสดีชาวโลก
ยินดีต้อนรับสู่ Edureka
การประกาศ Java Interface: Syntax
interface interface_name {// ประกาศฟิลด์ค่าคงที่ // ประกาศ method () // default method}
ให้เราดูตัวอย่างบน Java Interface
ตัวอย่างอินเตอร์เฟส Java
ให้เราสร้างเครื่องคิดเลขง่ายๆโดยใช้ Java Interface
// รหัสอินเทอร์เฟซ
package basicoperations public interface maths {public void add () public void sub () public void mul () public void div ()}
// รหัสชั้นเรียน
package basicoperations import java.util.Scanner public class student1 ใช้คณิตศาสตร์ {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('ป้อนค่าจำนวนเต็มสองค่าใด ๆ เพื่อทำการเพิ่ม') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Sum of' + a + 'and' + b + 'is' + s)} @Override public void sub () {Scanner kb = สแกนเนอร์ใหม่ (System.in) System.out.println ('ป้อนค่าจำนวนเต็มสองค่าใด ๆ เพื่อดำเนินการย่อย') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('ความแตกต่างของ' + a + 'และ' + b + 'คือ' + s)} @Override โมฆะสาธารณะ mul () {Scanner kb = สแกนเนอร์ใหม่ (System.in) System.out.println ('Enter การคูณค่าจำนวนเต็มสองค่า ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Product of '+ a +' และ '+ b +' is '+ s)} @Override โมฆะสาธารณะ div () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values division') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Quotient of' + a + 'และ' + b + 'is' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}
เอาท์พุต:
ต่อไปเราจะเรียนรู้การซ้อนอินเทอร์เฟซ Java
การซ้อนอินเทอร์เฟซ Java
อินเทอร์เฟซการทำรัง เป็นกระบวนการประกาศอินเทอร์เฟซภายในอีกอันหนึ่ง อินเทอร์เฟซที่มีอยู่ หรือประกาศอินเทอร์เฟซภายในไฟล์ คลาส. อินเทอร์เฟซที่ซ้อนกันเรียกอีกอย่างว่าไฟล์ อินเทอร์เฟซภายใน
ไม่สามารถเข้าถึงอินเทอร์เฟซที่ซ้อนกันได้ โดยตรง . ดังนั้นการทำรังจึงถูกนำมาใช้เพื่อแก้ไข Namespaces โดยการจัดกลุ่มด้วยสิ่งที่เกี่ยวข้อง อินเทอร์เฟซ และ ชั้นเรียน ตามขั้นตอนนี้เราสามารถโทร อินเทอร์เฟซที่ซ้อนกัน ผ่าน ชั้นนอก หรือ อินเทอร์เฟซภายนอก ชื่อตามด้วย จุด (.) และ ชื่ออินเทอร์เฟซ
ให้เราลองใช้ตัวอย่างตาม อินเทอร์เฟซการทำรัง ก่อนอื่นให้เราลองทำรัง a อินเตอร์เฟส Java ภายในอื่น อินเตอร์เฟส Java ดังแสดงด้านล่าง:
// รหัสอินเทอร์เฟซ
แพ็คเกจ Nest อินเทอร์เฟซสาธารณะ OuterInterface {void display () อินเทอร์เฟซ InnerInterface {void InnerMethod ()}}
// รหัสชั้นเรียน
แพ็กเกจคลาส Nest NestedInterfaceDemo ใช้ OuterInterface.InnerInterface {โมฆะสาธารณะ InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') สำหรับ (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nPrinting from Nested InnerInterface method ... ! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}
เอาท์พุต:
10 เทอมแรก: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + การพิมพ์จากวิธีอินเทอร์เฟซแบบซ้อนกัน ... !
ตอนนี้ให้เราลองทำรัง a อินเตอร์เฟส Java ภายใน คลาส Java
// รหัสอินเทอร์เฟซ
แพ็กเกจ Nest2 คลาสสาธารณะ EdurekaClass {อินเทอร์เฟซ EdurekaInterface {void NestedMethod ()}}
// รหัสชั้นเรียน
แพ็กเกจ Nest2 คลาส NestedInterfaceDemo2 ใช้ EdurekaClass.EdurekaInterface {โมฆะสาธารณะ NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [iByteArrayArray.str. .length i ++) ผลลัพธ์ [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (สตริงใหม่ (ผลลัพธ์))} โมฆะแบบคงที่สาธารณะ main (String args []) {EdurekaClass.EdurekaInterface obj = NestedInterfaceDemo2 ใหม่ () obj.NestedMethod ()}}
เอาท์พุต:
akerudE
แม้ว่าอินเทอร์เฟซจะดูเหมือนเกือบจะคล้ายกับคลาส แต่ก็มีความแตกต่างบางประการให้เราพูดถึงความแตกต่างของพวกเขา
ความแตกต่างระหว่าง Java Class และ Java Interface
อินเตอร์เฟซ | ชั้นเรียน |
รองรับการสืบทอดหลายรายการ | ไม่รองรับการสืบทอดหลายรายการ |
ไม่มีสมาชิกข้อมูล | รวมถึงสมาชิกข้อมูล |
ไม่มีตัวสร้าง | รวมถึงตัวสร้าง |
รวมสมาชิกที่ไม่สมบูรณ์ (สมาชิกลายเซ็น) | รวมทั้งสมาชิกที่สมบูรณ์ (บทคัดย่อ) และสมาชิกไม่สมบูรณ์ |
ไม่มี Access Modifiers | รวมถึงตัวปรับแต่งการเข้าถึง |
อินเทอร์เฟซไม่มีสมาชิกแบบคงที่ | คลาสนี้มีสมาชิกทั้งหมดเป็นแบบคงที่ |
ข้อดีและข้อเสียของ Java Interface
ข้อดี:
- รองรับ Java Interface มรดกหลายรายการ
- Java Interface ช่วยให้โปรแกรมเมอร์สามารถแยกวิธีการเขียนโปรแกรมที่ซับซ้อนและทำให้ไฟล์ การพึ่งพา ระหว่างวัตถุ
- Java Interface ทำให้ไฟล์ สมาชิกข้อมูล และ วิธีการ ในแอปพลิเคชันที่จะใช้ร่วมกันอย่างหลวม ๆ
ข้อเสีย:
- การใช้ Java Interface จะทำให้ไฟล์ ความเร็วในการดำเนินการ ของแอปพลิเคชัน
- Java Interfaces ในแอปพลิเคชันนั้นใช้ซ้ำ ๆ กันในระดับมากหรือแทบจะไม่ได้ใช้เลย
ประเด็นสำคัญบนอินเตอร์เฟส Java
- ไม่มีวิธีการใดที่ประกาศในอินเทอร์เฟซที่มีเนื้อหาที่ทำให้เป็นนามธรรมที่สมบูรณ์
- ไม่สามารถสร้างออบเจ็กต์ของอินเทอร์เฟซได้ ดังนั้นการสร้างอินเทอร์เฟซของอินเทอร์เฟซจึงเป็นไปไม่ได้
- คลาสสามารถใช้อินเทอร์เฟซได้โดยใช้การใช้คีย์เวิร์ด ให้เราดูสิ่งนี้ผ่านตัวอย่าง
// รหัสอินเทอร์เฟซ
แพคเกจ extInterface อินเตอร์เฟซสาธารณะ extInterface {โมฆะสาธารณะ method1 () โมฆะสาธารณะ method2 ()}
// รหัสชั้นเรียน
แพคเกจ extInterface นำเข้าคลาส java.util.Scanner Edureka ใช้ extInterface {โมฆะสาธารณะ method1 () {System.out.println ('การใช้งาน method1') เครื่องสแกนเนอร์ = สแกนเนอร์ใหม่ (System.in) System.out.println ('ป้อนหมายเลข เพื่อค้นหารากที่สองใน Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' รากที่สองของจำนวน:% f คือ:% f% n ', กำลังสอง, squareRoot)} โมฆะสาธารณะ method2 () {System.out.println ('การใช้งาน method2')} โมฆะคงที่สาธารณะ main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}
เอาท์พุต:
การใช้ method1 ป้อนตัวเลขเพื่อค้นหารากที่สองใน Java: 16 รากที่สองของจำนวน: 16.0 คือ: 4.0
- คลาสสามารถใช้การสืบทอดหลายรายการในอินสแตนซ์เดียว ให้เราเข้าใจผ่านรหัสต่อไปนี้
// อินเทอร์เฟซ 1 รหัส
package ExtendInt public interface Interface1 {public void armstrong ()}
// อินเทอร์เฟซ 2 รหัส
package ExtendInt public interface Interface2 {public void prime ()} // แพ็กเกจรหัสคลาส ExtendInt คลาสสาธารณะ Edureka2 ใช้ Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n ในขณะที่ (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('armstrong number') else System.out.println ('ไม่ใช่หมายเลขอาร์มสตรอง') System.out.println ('Extending to Interface 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // input m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'ไม่ใช่จำนวนเฉพาะ')} else {สำหรับ (i = 2i & lt = mi ++) {if (n% i == 0) {ระบบ .out.println (n + 'ไม่ใช่จำนวนเฉพาะ') flag = 1 break}} if (flag == 0) {System.out.println (n + 'is prime number')}} System.out.println ('Extending to Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}
เอาท์พุต:
สอนทำเว็บทับทิมบนราง
3 คือจำนวนเฉพาะขยายไปยังอินเทอร์เฟซ 2 หมายเลขอาร์มสตรองขยายไปยังอินเทอร์เฟซ 1
- Java Interface ต้องการตัวแปรที่ประกาศเพื่อเตรียมใช้งานในขณะที่ประกาศ
- Access Modifiers สำหรับอินเทอร์เฟซถูกตั้งค่าเป็นแบบคงที่สาธารณะและสุดท้ายตามค่าเริ่มต้น ให้เราเข้าใจสิ่งนี้ด้วยตัวอย่าง
// รหัสอินเทอร์เฟซ
แพคเกจทดสอบอินเทอร์เฟซสาธารณะลอง {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
- การประกาศข้างต้นทั้งหมดเป็นความจริงและถูกต้องภายในอินเทอร์เฟซ
- Java Interface สามารถขยายอินเทอร์เฟซจำนวนเท่าใดก็ได้ แต่ไม่สามารถใช้งานได้
- คลาส Java สามารถใช้อินเทอร์เฟซจำนวนเท่าใดก็ได้
- Java Class ไม่สามารถใช้อินเตอร์เฟสที่มีชื่อเมธอดเดียวกันและประเภทการส่งคืนที่แตกต่างกัน
- หากมีสองวิธีหรือมากกว่าที่มีชื่อเมธอดเดียวกันมีอยู่ในหลายอินเทอร์เฟซการใช้เมธอดเพียงครั้งเดียวก็เพียงพอแล้ว ให้เราเข้าใจสิ่งนี้ด้วยตัวอย่างที่ใช้ได้จริง
// รหัสอินเทอร์เฟซ
แพ็กเกจอินเทอร์เฟซสาธารณะเดียวกัน A {public void display ()} // Interface Code แพ็กเกจอินเทอร์เฟซสาธารณะเดียวกัน B {public void display ()} // แพ็กเกจ Class Code คลาสเดียวกันใช้ A, B {public void display () {System.out .println ('displaying data')} public static void main (String [] args) {same print = new same () print.display ()}}
เอาท์พุต:
ยินดีต้อนรับสู่ Edureka E-Learning
ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของบทความนี้ ฉันหวังว่าคุณจะเข้าใจถึงความสำคัญของอินเทอร์เฟซไวยากรณ์ฟังก์ชันการทำงานการซ้อนอินเทอร์เฟซประเด็นสำคัญของอินเทอร์เฟซ Java และการดำเนินการที่ดำเนินการโดยใช้พวกเขา
เมื่อคุณเข้าใจพื้นฐานของ Java แล้วให้ตรวจสอบไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer หลักสูตรนี้ออกแบบมาเพื่อให้คุณเริ่มต้นการเขียนโปรแกรม Java และฝึกอบรมแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & ฤดูใบไม้ผลิ .
มีคำถามสำหรับเรา? ระบุไว้ในส่วนความคิดเห็นของบล็อก 'Java Interface' และเราจะติดต่อกลับโดยเร็วที่สุด