Java의 인터페이스 란 무엇이며 어떻게 구현합니까?



이 기사는 Java 인터페이스와 그 기능과 관련된 다양한 유형의 예제에 대한 포괄적 인 접근 방식을 제공합니다.

' 상호 작용 Java 프로그래밍 언어에서 추상화를 달성하는 고급 수준입니다. Java 인터페이스는 복잡성 감소 코드에서 단순화하고 가독성 . 이 기사에서는 다음 문서를 통해 Java 인터페이스에 대해 설명합니다.

Java 인터페이스 란 무엇입니까?

컴퓨터 인터페이스 둘 이상의 시스템을 구분하는 경계로 알려져 있습니다. 신호, 명령 또는 프로토콜을 사용할 수있는 시스템의 구성 요소간에 데이터를 교환합니다.





java-interface

Java Abstraction은 메소드 내부에 작성된 구현 로직을 숨김으로써 특정 메소드의 기능을 제공합니다. 마찬가지로 Java 인터페이스는 메서드 선언을 포함하지만 그 정의는 포함하지 않는 추상 클래스이기도합니다. 클래스 구현 추상 메서드를 상속하는 인터페이스 추상적 인 방법과 함께 상호 작용 또한 포함 할 수 있습니다 상수, 정적 메서드, 중첩 인터페이스기본 방법.



클래스와 인터페이스의 유사점.

인터페이스는 Java의 일반 클래스와 완전히 유사합니다. 인터페이스에는 추상 메서드가 포함되어 있으며 이러한 메서드는 구현되도록 설계되었습니다. 이 프로세스는 상속과 같으며 클래스에 관해서는 일반적입니다. 유사점에 대해 더 논의 할 것입니다.

  • 클래스와 마찬가지로 인터페이스는 필요한만큼의 메서드를 포함 할 수도 있습니다.
  • 클래스와 유사하게 인터페이스도 .자바 확장 파일.
  • 놀랍게도 인터페이스의 바이트 코드는 .수업 파일.
  • 인터페이스는 패키지 형식으로 표시되며 해당 바이트 코드는 패키지 이름과 일치하는 디렉토리에 있습니다.

인터페이스가 필요한 이유는 무엇입니까?

Java는 지원하지 않습니다. 다중 상속, 그로 인해 클래스가 한 인스턴스에서 둘 이상의 클래스를 확장하는 것을 허용하지 않습니다. 어린이 클래스 의 속성을 상속 할 수 없습니다 여러 부모 클래스 결과적으로 단일 인스턴스에서 다이아몬드 문제. 이 문제를 극복하기 위해 상호 작용 소개됩니다. 예제를 통해이 문제를 이해합시다.



두 대의 비행기가 있다고 가정 해 보겠습니다. 승객, 다른 하나만 위치. 이제 우리는 상속하다 화물기와 여객기의 속성. Java는이 솔루션을 지원하지 않습니다. 모호 두 비행기 사이.

그러나 Java가 하나의 평면을 상속하고 있다고 느끼게하여 가능하게 할 수 있다면 구현 다른 평면에있는 방법. 그것은 승객과화물 짐을 모두 가져가는 상업용 비행기와 같습니다. 인터페이스는 서로의 구성 요소를 방해하지 않고 두 작업을 모두 수행 할 수있는 더 큰 평면을 만드는 것과 같습니다. 인터페이스 클래스.

// 클래스 A 코드

패키지 다중 클래스 A {void msg () {System.out.println ( 'Hello')}}

// 클래스 B 코드

자바의 토큰은 무엇입니까
패키지 다중 클래스 B {void msg () {System.out.println ( 'Welcome')}}

클래스 C 코드

package multiple class C extends A, B {// 이것은 Java에서 허용되지 않으며 오류가 발생하고 코드가 실행되지 않습니다. public static void main (String args []) {C obj = new C () obj.msg ()}}

산출:

오류. 이 특정 접근 방식은 예외를 발생시킵니다. Java는 다중 상속을 지원하지 않습니다. 이 오류는 다음과 같이 알려져 있습니다. 다이아몬드 문제 

인터페이스를 사용하여 솔루션을 시도해 보겠습니다. 어린이 클래스 메소드에 액세스 할 수 있습니다. 여러 부모 단일 인스턴스의 클래스.

// 인터페이스 코드

패키지 MIS 공용 인터페이스 솔루션 {public void Hello () public void Welcome ()}

// 클래스 코드

package MIS public class classA는 솔루션을 구현합니다 {public void Hello () {java.lang.System.out.println ( 'Hello world')} public void Welcome () {java.lang.System.out.println ( 'Welcome to Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

산출:

Hello World
Edureka에 오신 것을 환영합니다

Java 인터페이스 선언 : 구문

interface interface_name {// 상수 필드 선언 // 메소드 선언 () // 기본 메소드}

Java 인터페이스에 대한 예제를 살펴 보겠습니다.

자바 인터페이스 예

Java 인터페이스를 기반으로 간단한 계산기를 만들어 보겠습니다.

// 인터페이스 코드

패키지 basicoperations 공용 인터페이스 수학 {public void add () public void sub () public void mul () public void div ()}

// 클래스 코드

package basicoperations import java.util.Scanner public class student1 implements maths {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ( 'Enter any two integer values ​​to perform 덧셈') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ( ''+ a + '및'+ b + '의 합은'+ s)입니다.} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ( '빼기를 수행 할 정수 값 두 개 입력') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ( ''+ a + '와'+ b + '의 차이점은'+ s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ( 'Enter 임의의 두 정수 값 곱하기 ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' '+ a +'및 '+ b +'의 곱은 '+ s)} @Override public void 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 + '는'+ s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

산출:

더 나아가서 Java 인터페이스를 중첩하는 방법을 배웁니다.

자바 인터페이스 중첩

인터페이스 중첩 인터페이스를 다른 내부에 선언하는 프로세스입니다. 기존 인터페이스 또는 내부 인터페이스 선언 수업. 중첩 인터페이스는 내부 인터페이스.

중첩 인터페이스에 액세스 할 수 없습니다. 직접 . 따라서 중첩은 네임 스페이스를 관련 항목과 그룹화하여 해결하기 위해 구현됩니다. 인터페이스클래스. 이 절차에 따라우리는 중첩 된 인터페이스 통해 외부 클래스 또는 외부 인터페이스 이름 뒤에 a 도트 (.) , 및 인터페이스 이름.

다음을 기반으로 몇 가지 예를 들어 보겠습니다. 인터페이스 중첩. 먼저, 자바 인터페이스 다른 안에 자바 인터페이스 아래 그림과 같이:

// 인터페이스 코드

패키지 Nest 공용 인터페이스 OuterInterface {void display () 인터페이스 InnerInterface {void InnerMethod ()}}

// 클래스 코드

패키지 Nest 클래스 NestedInterfaceDemo는 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 중첩 된 InnerInterface 메서드에서 인쇄 중 ...! 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 + Nested InnerInterface 방법에서 인쇄 ...!

이제 중첩을 시도해 보겠습니다. 자바 인터페이스 내부 자바 클래스.

// 인터페이스 코드

패키지 Nest2 공개 클래스 EdurekaClass {interface EdurekaInterface {void NestedMethod ()}}

// 클래스 코드

package Nest2 class NestedInterfaceDemo2는 EdurekaClass.EdurekaInterface를 구현합니다 {public void NestedMethod () {String input = 'Edureka'byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] for (int i = 0 i & ltstrAsByteArray .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 ()}}

산출:

akerudE

인터페이스는 클래스와 거의 비슷해 보이지만 차이점이 있습니다. 차이점에 대해 설명하겠습니다.

Java 클래스와 Java 인터페이스의 차이점

상호 작용 수업
다중 상속 지원 다중 상속을 지원하지 않습니다.
데이터 멤버가 없습니다. 데이터 멤버 포함
생성자가 없음 생성자 포함
불완전한 회원 포함 (서명 회원) Complete (Abstract) 및 Incomplete 멤버 모두 포함
액세스 수정자가 없습니다. 액세스 수정 자 포함
인터페이스에 정적 멤버가 없습니다. 클래스에는 모든 멤버가 정적

Java 인터페이스의 장단점

장점 :

  • Java 인터페이스 지원 다중 상속.
  • 프로그래머는 Java 인터페이스를 사용하여 복잡한 프로그래밍 접근 방식을 분리하고 종속성 개체 사이.
  • 자바 인터페이스는 데이터 멤버행동 양식 느슨하게 결합되는 응용 프로그램에서.

단점 :

  • Java 인터페이스를 사용하면 실행 속도 응용 프로그램의.
  • 애플리케이션의 Java 인터페이스는 광범위하게 반복적으로 사용되거나 거의 사용되지 않습니다.

자바 인터페이스의 요점

  • 인터페이스에 선언 된 메소드에는 완전한 추상화를 제공하는 본문이 없습니다.
  • 인터페이스의 객체를 생성 할 수 없습니다. 따라서 인터페이스의 인스턴스화는 불가능합니다.
  • Class는 키워드 implements를 사용하여 인터페이스를 구현할 수 있습니다. 예를 통해이를 살펴 보겠습니다.

// 인터페이스 코드

패키지 extInterface 공용 인터페이스 extInterface {public void method1 () public void method2 ()}

// 클래스 코드

package extInterface import java.util.Scanner class Edureka는 extInterface를 구현합니다 {public void method1 () {System.out.println ( 'implementation of method1') Scanner scanner = new Scanner (System.in) System.out.println ( 'Enter number Java에서 제곱근 찾기 : ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf ('Square root of number : % f is : % f % n ', square, squareRoot)} public void method2 () {System.out.println ( 'implementation of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

산출:

방법의 구현 1 자바에서 제곱근을 찾을 숫자 입력 : 16 숫자의 제곱근 : 16.0 = 4.0
  • 클래스는 단일 인스턴스에서 여러 상속을 구현할 수 있습니다. 다음 코드를 통해 이해합시다.

// 인터페이스 1 코드

패키지 ExtendInt 공용 인터페이스 Interface1 {public void armstrong ()}

// 인터페이스 2 코드

package ExtendInt public interface Interface2 {public void prime ()} // 클래스 코드 package ExtendInt public class Edureka2는 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 ( '암스트롱 번호 아님') System.out.println ( '인터페이스 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 {for (i = 2i & lt = mi ++) {if (n % i == 0) {시스템 .out.println (n + '는 소수가 아닙니다') flag = 1 break}} if (flag == 0) {System.out.println (n + '은 소수')}} 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는 선언시 초기화되도록 선언 된 변수를 요구합니다.
  • 인터페이스에 대한 액세스 수정자는 기본적으로 public static 및 final로 설정됩니다. 예를 들어 이해합시다.

// 인터페이스 코드

package test public interface Try {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • 위의 모든 선언은 참이고 인터페이스 내에서 유효합니다.
  • Java 인터페이스는 여러 인터페이스를 확장 할 수 있지만 구현할 수는 없습니다.
  • Java 클래스는 여러 인터페이스를 구현할 수 있습니다.
  • Java 클래스는 동일한 메서드 이름과 다른 반환 유형을 가진 인터페이스를 구현할 수 없습니다.
  • 메서드 이름이 같은 메서드가 두 개 이상 있고 여러 인터페이스에 존재하는 경우 메서드를 한 번만 구현하면됩니다. 실용적인 예를 들어 이해합시다.

// 인터페이스 코드

package same public interface A {public void display ()} // Interface Code package same public interface B {public void display ()} // Class Code package same class same implementations 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의 기본 사항을 이해 했으므로 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate 및 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다. .

질문이 있으십니까? 이 'Java Interface'블로그의 댓글 섹션에 언급하시면 가능한 한 빨리 연락 드리겠습니다.