Interface ใน Java คืออะไรและจะใช้งานได้อย่างไร?



บทความนี้จะช่วยให้คุณมีแนวทางที่ครอบคลุมสำหรับ Java Interface และตัวอย่างประเภทต่างๆที่เกี่ยวข้องกับฟังก์ชันการทำงาน

' อินเตอร์เฟซ เป็นขั้นสูงในการบรรลุนามธรรมในภาษาการเขียนโปรแกรม Java อินเทอร์เฟซ Java ช่วยใน ลดความซับซ้อน ในรหัสและทำให้ไฟล์ ความสามารถในการอ่าน . ในบทความนี้ฉันจะอธิบายให้คุณทราบเกี่ยวกับ Java Interface ผ่านเอกสารต่อไปนี้

Java Interface คืออะไร?

อินเตอร์เฟซคอมพิวเตอร์ เรียกได้ว่าเป็นเขตแดนที่แยกระบบตั้งแต่สองระบบขึ้นไป แลกเปลี่ยนข้อมูลระหว่างส่วนประกอบในระบบซึ่งสามารถส่งสัญญาณคำสั่งหรือโปรโตคอล





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' และเราจะติดต่อกลับโดยเร็วที่สุด