Giao diện trong Java là gì và Cách triển khai nó?



Bài viết này sẽ giúp bạn có một cách tiếp cận toàn diện đối với Giao diện Java và các loại ví dụ khác nhau liên quan đến chức năng của nó.

' Giao diện là một cấp độ nâng cao để đạt được tính trừu tượng trong Ngôn ngữ Lập trình Java. Giao diện Java giúp giảm sự phức tạp trong mã và đơn giản hóa khả năng đọc . Trong bài viết này, tôi sẽ giải thích cho các bạn về Giao diện Java thông qua docket sau.

Giao diện Java là gì?

Giao diện máy tính được gọi là ranh giới ngăn cách hai hoặc nhiều hệ thống. Nó trao đổi dữ liệu giữa các thành phần trong một hệ thống có thể là tín hiệu, lệnh hoặc giao thức.





java-interface

Java Abstraction cung cấp chức năng của một phương thức cụ thể bằng cách ẩn logic triển khai được viết bên trong phương thức. Tương tự, Giao diện Java cũng là một Lớp trừu tượng bao gồm Khai báo phương thức nhưng không phải định nghĩa của nó. Một lớp học dụng cụ một Giao diện để kế thừa các phương thức trừu tượng. Cùng với các phương thức trừu tượng, một giao diện cũng có thể bao gồm hằng số, phương thức tĩnh, giao diện lồng nhaucác phương thức mặc định.



Điểm tương đồng giữa Lớp và Giao diện.

Một giao diện hoàn toàn tương tự như một lớp bình thường trong Java. Một giao diện bao gồm các phương thức trừu tượng và các phương thức này được thiết kế để thực hiện. Quá trình này chỉ đơn thuần là bằng kế thừa, điều này là bình thường khi nói đến các lớp. Chúng ta sẽ thảo luận thêm về những điểm tương đồng.

  • Tương tự như một lớp, một giao diện cũng có thể chứa nhiều phương thức theo yêu cầu.
  • Tương tự như các lớp, giao diện cũng được viết với .java tập tin mở rộng.
  • Đáng ngạc nhiên là mã bytecode cho một giao diện sẽ xuất hiện trong .lớp học tập tin.
  • Một giao diện được hiển thị dưới dạng một gói và mã bytecode tương ứng của chúng nằm trong một thư mục khớp với tên gói.

Tại sao chúng ta cần một Giao diện?

Java không hỗ trợ Nhiều người thừa kế, do đó, Nó sẽ không cho phép các lớp mở rộng nhiều hơn một lớp tại một thể hiện. Lớp học trẻ em không thể kế thừa các thuộc tính của nhiều lớp cha tại một trường hợp duy nhất, vì nó dẫn đến Bài toán kim cương. Để khắc phục sự cố này, Giao diện được giới thiệu. Hãy để chúng tôi hiểu vấn đề này thông qua một ví dụ.



Giả sử chúng ta có hai chiếc máy bay, một chiếc chỉ có thể chở hành khách, cái kia chỉ Chức vụ. Bây giờ, chúng ta cần thừa kế thuộc tính của cả máy bay chở hàng và máy bay chở khách. Java sẽ không hỗ trợ giải pháp này vì nó kết thúc bằng sự mơ hồ giữa hai mặt phẳng.

Tuy nhiên, nếu bạn có thể làm cho nó thành hiện thực bằng cách làm cho Java cảm thấy rằng nó đang kế thừa một mặt phẳng và thực thi các phương thức hiện diện trong mặt phẳng khác. Nó giống như một chiếc Máy bay thương mại chở cả hành khách và hành lý hàng hóa. Giao diện giống như tạo ra một mặt phẳng lớn hơn có thể thực hiện cả hai nhiệm vụ mà không can thiệp vào các thành phần của nhau, thay vào đó chỉ vay mượn các phương thức từ Lớp giao diện.

// Mã lớp A

gói nhiều lớp A {void msg () {System.out.println ('Hello')}}

// Mã lớp B

gói nhiều lớp B {void msg () {System.out.println ('Chào mừng')}}

Mã lớp C

gói nhiều lớp C mở rộng A, B {// Điều này sẽ không được Java chấp nhận, Nó sẽ tạo ra một lỗi và mã sẽ không được thực thi. public static void main (String args []) {C obj = new C () obj.msg ()}}

Đầu ra:

Lỗi. Cách tiếp cận cụ thể này ném ra một ngoại lệ. Java không hỗ trợ Nhiều kế thừa. Lỗi này được gọi là Vấn đề kim cương 

Hãy để chúng tôi thử một giải pháp bằng cách sử dụng một giao diện, Lớp trẻ em có thể truy cập các phương pháp từ Nhiều phụ huynh các lớp tại một trường hợp duy nhất.

// Mã giao diện

cách chuyển đổi nhị phân sang thập phân trong java
gói giải pháp giao diện công cộng MIS {public void Hello () public void Welcome ()}

// Mã lớp

package MIS public class classA triển khai giải pháp {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Chào mừng đến với Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Đầu ra:

Chào thế giới
Chào mừng đến với Edureka

Khai báo giao diện Java: Cú pháp

interface interface_name {// khai báo các trường hằng // khai báo các phương thức () // các phương thức mặc định}

Hãy cùng chúng tôi xem qua một ví dụ về Giao diện Java

Ví dụ về giao diện Java

Hãy để chúng tôi tạo một Máy tính đơn giản dựa trên Giao diện Java.

// Mã giao diện

package basicoperations public interface maths {public void add () public void sub () public void mul () public void div ()}

// Mã lớp

package basicoperations import java.util.Scanner public class student1 triển khai toán học {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Nhập hai giá trị số nguyên bất kỳ để thực hiện phép cộng') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Tổng của' + a + 'và' + b + 'là' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Nhập hai giá trị nguyên bất kỳ để thực hiện phép tính con') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Sự khác biệt của' + a + 'và' + b + 'là' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter phép nhân hai giá trị nguyên bất kỳ ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Tích của '+ a +' và '+ b +' là '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Nhập bất kỳ phép chia hai giá trị số nguyên nào') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Thương số của' + a + 'và' + b + 'là' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Đầu ra:

Tiến xa hơn, chúng ta sẽ học cách lồng một Giao diện Java.

Lồng giao diện Java

Giao diện lồng là một quá trình khai báo một Giao diện bên trong Giao diện hiện tại hoặc khai báo một Giao diện bên trong Lớp học. Giao diện lồng nhau còn được gọi là Giao diện bên trong.

Không thể truy cập Giao diện lồng nhau trực tiếp . Do đó, việc làm tổ được triển khai để giải quyết các Không gian tên bằng cách nhóm chúng với Giao diệnCác lớp học. Bằng thủ tục này,chúng ta có thể gọi Giao diện lồng nhau thông qua Lớp ngoài hoặc là Giao diện bên ngoài tên theo sau bởi một dấu chấm (.)Tên giao diện.

Hãy để chúng tôi thử một số ví dụ dựa trên Giao diện làm tổ. Đầu tiên, chúng ta hãy thử lồng ghép một Giao diện Java bên trong khác Giao diện Java như hình bên dưới:

// Mã giao diện

package Nest public interface OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Mã lớp

package Nest class NestedInterfaceDemo triển khai OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('n In từ phương thức lồng nhau InnerInterface ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Đầu ra:

10 số hạng đầu tiên: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + In từ phương thức Nested InnerInterface ...!

Bây giờ, chúng ta hãy cố gắng tổ chức một Giao diện Java bên trong Lớp Java.

// Mã giao diện

gói Nest2 public class EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

// Mã lớp

package Nest2 class NestedInterfaceDemo2 thực hiện EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.le] for (intt istray = 0 .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Đầu ra:

akerudE

Mặc dù Giao diện trông gần giống với một Lớp, nhưng có một số khác biệt giữa chúng, Hãy để chúng tôi thảo luận về sự khác biệt của chúng.

Sự khác biệt giữa Lớp Java và Giao diện Java

GIAO DIỆN LỚP HỌC
Hỗ trợ nhiều thừa kế Không hỗ trợ nhiều thừa kế
Không có thành viên dữ liệu Bao gồm các thành viên dữ liệu
Không có Trình tạo Bao gồm các nhà xây dựng
Bao gồm các thành viên chưa hoàn chỉnh (thành viên có chữ ký) Bao gồm cả thành viên Hoàn thành (Tóm tắt) và Chưa hoàn thành
Không có Công cụ sửa đổi quyền truy cập Bao gồm Công cụ sửa đổi quyền truy cập
Giao diện không có Thành viên tĩnh Lớp có tất cả các thành viên là Tĩnh

Ưu điểm và nhược điểm của giao diện Java

Ưu điểm:

  • Giao diện Java hỗ trợ Nhiều người thừa kế.
  • Giao diện Java cho phép các lập trình viên phá vỡ các phương pháp lập trình phức tạp và đơn giản hóa sự phụ thuộc giữa các đối tượng.
  • Giao diện Java làm cho thành viên dữ liệuphương pháp trong một ứng dụng được ghép nối lỏng lẻo.

Nhược điểm:

  • Việc sử dụng Giao diện Java làm giảm tốc độ thực thi của ứng dụng.
  • Các giao diện Java trong ứng dụng hoặc được sử dụng nhiều lần ở mức độ lớn hoặc hầu như không được sử dụng.

Các điểm chính trên giao diện Java

  • Không có phương thức nào được khai báo trong giao diện có phần thân khiến nó cung cấp tính trừu tượng hoàn chỉnh.
  • Không thể tạo một đối tượng của một giao diện. Do đó, không thể tạo Giao diện được.
  • Một Lớp có thể triển khai một giao diện bằng cách sử dụng các triển khai từ khóa. Hãy để chúng tôi xem điều này thông qua một ví dụ.

// Mã giao diện

package extInterface public interface extInterface {public void method1 () public void method2 ()}

// Mã lớp

package extInterface import java.util.Scanner class Edureka thực hiện extInterface {public void method1 () {System.out.println ('implement method1') Scanner scanner = new Scanner (System.in) System.out.println ('Nhập số để tìm căn bậc hai trong Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Căn bậc hai của số:% f là:% f% n ', bình phương, squareRoot)} public void method2 () {System.out.println ('implement of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Đầu ra:

1 Nhập số để tìm căn bậc hai trong Java: 16 Căn bậc hai của số: 16.0 là: 4.0
  • Một Lớp có thể triển khai nhiều kế thừa tại một thể hiện. Hãy để chúng tôi hiểu nó thông qua đoạn mã sau.

// Giao diện 1 Mã

package ExtendInt public interface Interface1 {public void armstrong ()}

// Mã giao diện 2

package ExtendInt public interface Interface2 {public void prime ()} // Class Code package ExtendInt public class Edureka2 thực hiện Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n while (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 ('Không phải số armstrong') System.out.println ('Mở rộng đến Giao diện 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 + 'không phải là số nguyên tố')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {Hệ thống .out.println (n + 'không phải là số nguyên tố') flag = 1 break}} if (flag == 0) {System.out.println (n + 'là số nguyên tố')}} System.out.println ('Mở rộng to Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Đầu ra:

đối số dòng lệnh trong mã ví dụ java
3 là số nguyên tố Mở rộng đến Giao diện 2 số Armstrong Mở rộng đến Giao diện 1
  • Giao diện Java yêu cầu các biến được khai báo phải được khởi tạo tại thời điểm khai báo.
  • Access Modifier cho một giao diện được đặt thành công khai tĩnh và cuối cùng theo mặc định. Hãy để chúng tôi hiểu điều này bằng một ví dụ

// Mã giao diện

package test public interface Thử {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Tất cả các khai báo trên đều đúng và hợp lệ bên trong Giao diện.
  • Giao diện Java có khả năng mở rộng bất kỳ số lượng Giao diện nào, nhưng không bao giờ có thể triển khai một.
  • Một lớp Java có thể triển khai bất kỳ số lượng Giao diện nào.
  • Lớp Java không thể triển khai các Giao diện có cùng tên phương thức và kiểu trả về khác nhau.
  • Nếu có hai hoặc nhiều phương thức có cùng tên phương thức, đang tồn tại trong nhiều giao diện, thì việc triển khai phương thức một lần là đủ. Hãy để chúng tôi hiểu điều này bằng một ví dụ thực tế.

// Mã giao diện

gói cùng giao diện chung A {public void display ()} // Gói mã giao diện giống giao diện chung B {public void display ()} // Gói mã lớp cùng một lớp triển khai A, B {public void display () {System.out .println ('display data')} public static void main (String [] args) {same print = new same () print.display ()}}

Đầu ra:

Chào mừng bạn đến với Edureka E-Learning

Với điều này, chúng ta đến phần cuối của bài viết này. Tôi hy vọng bạn đã hiểu tầm quan trọng của Giao diện, Cú pháp, chức năng, Lồng giao diện, Các điểm chính của Giao diện Java và các thao tác được thực hiện bằng cách sử dụng chúng.

Bây giờ bạn đã hiểu cơ bản về Java, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Mùa xuân .

Có một câu hỏi cho chúng tôi? Đề cập đến nó trong phần nhận xét của blog “Giao diện Java” này và chúng tôi sẽ liên hệ lại với bạn sớm nhất có thể.