안 자바의 인터페이스 수업의 청사진입니다. 정적 상수와 추상 메서드가 있습니다.
Java의 인터페이스는 달성하기 위한 메커니즘 추출 . Java 인터페이스에는 메소드 본문이 아닌 추상 메소드만 있을 수 있습니다. 추상화와 다중화를 달성하는 데 사용됩니다. 자바의 상속 .
루프 1~10에 대한 bash
즉, 인터페이스는 추상 메서드와 변수를 가질 수 있다고 말할 수 있습니다. 메소드 본문을 가질 수 없습니다.
자바 인터페이스도 IS-A 관계를 나타냅니다. .
추상 클래스처럼 인스턴스화할 수 없습니다.
Java 8부터 우리는 기본 및 정적 방법 인터페이스에서.
Java 9부터 우리는 개인 메소드 인터페이스에서.
Java 인터페이스를 사용하는 이유는 무엇입니까?
인터페이스를 사용하는 이유는 크게 세 가지입니다. 아래에 나와 있습니다.
- 추상화를 달성하는 데 사용됩니다.
- 인터페이스를 통해 다중 상속 기능을 지원할 수 있습니다.
- 느슨한 결합을 달성하는 데 사용할 수 있습니다.
인터페이스를 선언하는 방법은 무엇입니까?
인터페이스는 인터페이스 키워드를 사용하여 선언됩니다. 완전한 추상화를 제공합니다. 인터페이스의 모든 메소드가 빈 본문으로 선언되고 모든 필드가 기본적으로 public, static 및 final임을 의미합니다. 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 합니다.
통사론:
interface { // declare constant fields // declare methods that abstract // by default. }
Java 8 인터페이스 개선
부터 자바 8 , 인터페이스는 나중에 논의되는 기본 및 정적 메소드를 가질 수 있습니다.
컴파일러에 의한 내부 추가
Java 컴파일러는 인터페이스 메소드 앞에 공개 및 추상 키워드를 추가합니다. 또한 데이터 멤버 앞에 공개, 정적 및 최종 키워드를 추가합니다.
즉, 인터페이스 필드는 기본적으로 public, static 및 final이고, 메서드는 public 및 abstract입니다.
클래스와 인터페이스의 관계
아래 그림에서 볼 수 있듯이 클래스는 다른 클래스를 확장하고 인터페이스는 다른 인터페이스를 확장하지만 클래스는 인터페이스를 구현합니다. .
시스템 소프트웨어
Java 인터페이스 예
이 예제에서 Printable 인터페이스에는 메서드가 하나만 있으며 해당 구현은 A6 클래스에서 제공됩니다.
interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } }지금 테스트해보세요
산출:
Hello
Java 인터페이스 예: Drawable
이 예에서 Drawable 인터페이스에는 메서드가 하나만 있습니다. 구현은 Rectangle 및 Circle 클래스에 의해 제공됩니다. 실제 시나리오에서 인터페이스는 다른 사람이 정의하지만 해당 구현은 다른 구현 공급자가 제공합니다. 게다가 다른 사람이 사용하고 있습니다. 구현 부분은 인터페이스를 사용하는 사용자에게 숨겨집니다.
파일: TestInterface1.java
//Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }}지금 테스트해보세요
산출:
drawing circle
Java 인터페이스 예: 은행
Bank 인터페이스 구현을 제공하는 Java 인터페이스의 또 다른 예를 살펴보겠습니다.
파일: TestInterface2.java
interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }}지금 테스트해보세요
산출:
ROI: 9.15
인터페이스에 의한 Java의 다중 상속
클래스가 여러 인터페이스를 구현하거나 인터페이스가 여러 인터페이스를 확장하는 경우 이를 다중 상속이라고 합니다.
산술 논리 장치
interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } }지금 테스트해보세요
Output:Hello Welcome
Q) Java에서는 클래스를 통한 다중 상속이 지원되지 않지만, 인터페이스를 통해서는 가능합니다. 왜 그런가요?
상속 장에서 설명했듯이 다중 상속은 다음과 같은 경우에는 지원되지 않습니다. 수업 모호함 때문입니다. 하지만 인터페이스의 경우에는 모호성이 없기 때문에 지원됩니다. 구현 클래스에서 구현을 제공하기 때문입니다. 예를 들어:
interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } }지금 테스트해보세요
산출:
Hello
위의 예에서 볼 수 있듯이 Printable과 Showable 인터페이스는 동일한 메소드를 가지고 있지만 TestTnterface1 클래스에서 구현을 제공하므로 모호성은 없습니다.
인터페이스 상속
클래스는 인터페이스를 구현하지만 하나의 인터페이스는 다른 인터페이스를 확장합니다.
interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } }지금 테스트해보세요
산출:
Hello Welcome
인터페이스의 Java 8 기본 메소드
Java 8부터 인터페이스에 메소드 본문을 가질 수 있습니다. 하지만 우리는 그것을 기본 메소드로 만들어야 합니다. 예를 살펴보겠습니다:
파일: TestInterfaceDefault.java
interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }}지금 테스트해보세요
산출:
drawing rectangle default method
인터페이스의 Java 8 정적 메소드
Java 8부터 인터페이스에 정적 메소드를 가질 수 있습니다. 예를 살펴보겠습니다:
파일: TestInterfaceStatic.java
Java 객체를 json으로
interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }}지금 테스트해보세요
산출:
drawing rectangle 27
Q) 마커 또는 태그 인터페이스란 무엇입니까?
멤버가 없는 인터페이스를 마커 또는 태그가 지정된 인터페이스라고 합니다. 예를 들어 다음과 같습니다. 직렬화 가능 , Cloneable, Remote 등 JVM이 유용한 작업을 수행할 수 있도록 JVM에 몇 가지 필수 정보를 제공하는 데 사용됩니다.
//How Serializable interface is written? public interface Serializable{ }
Java의 중첩 인터페이스
참고: 인터페이스에는 중첩된 인터페이스라고 하는 또 다른 인터페이스가 있을 수 있습니다. 우리는 그것을 자세히 배울 것입니다. 중첩 클래스 장. 예를 들어:
interface printable{ void print(); interface MessagePrintable{ void msg(); } }중첩 인터페이스에 대한 추가 정보