"안녕하세요, 아미고! 오늘 당신은 몇 가지 발견을 할 것입니다. 오늘의 주제는 드럼 롤, 제발 인터페이스입니다. "

"그래. 날이 너무 좋아서 집에 목욕하러 가야겠다."

" 인터페이스 는 추상화 및 다형성의 자식입니다. 인터페이스는 모든 메서드가 추상인 추상 클래스와 매우 유사합니다. 클래스와 동일한 방식으로 선언되지만 키워드는 입니다. 다음은 몇 가지 예입니다. interface"

암호 설명 및 사실
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
1) 이라는 단어 대신에 class를 씁니다 interface.

2) 추상 메서드만 포함합니다(추상이라는 단어를 추가할 필요 없음).

3) 실제로 인터페이스의 모든 메소드는 공개됩니다.

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
인터페이스는 다른 인터페이스만 상속할 수 있습니다.

많은 부모 인터페이스를 가질 수 있습니다.

class abstract ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
클래스는 여러 인터페이스(및 단 하나의 클래스)를 상속할 수 있습니다. 이 상속을 표시하기 위해 키워드를 사용합니다  implements.

ChessItem 클래스는 추상으로 선언되었습니다. 그리기를 제외한 모든 상속된 메서드를 구현했습니다.

즉, ChessItem 하나의 추상 메서드를 포함합니다:  draw().

"흥미롭군요. 그런데 인터페이스가 왜 필요한가요? 언제 사용되나요?"

"인터페이스는 클래스보다 두 가지 강력한 이점이 있습니다."

1) 메소드 구현에서 "메소드 정의"의 분리.

이전에 다른 클래스가 자신의 클래스의 메서드를 호출하도록 허용하려면 해당 메서드를public . 특정 메소드가 자신의 클래스에서만 호출되도록 하려면 로 표시해야 합니다 private. 즉, 클래스의 메서드를 «모두를 위한»과 «나만을 위한»의 두 범주로 나누고 있습니다.

인터페이스를 사용하여 이러한 분리를 더욱 강화할 수 있습니다. 우리는 두 번째 "나만을 위한 수업"을 계승할 특별한 "모두를 위한 수업"을 만들 것입니다. 대략 다음과 같습니다.

전에
class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName()
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
후에
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
전에
public static void main(String[] args)
{
 Student student =
               new Student("Alibaba");
 System.out.println(student.getName());
}
후에
public static void main(String[] args)
{
 Student student =
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

클래스를 인터페이스인터페이스를 구현하는 클래스의 두 부분으로 나눕니다 .

"그래서 장점이 뭐야?"

"동일한 인터페이스는 서로 다른 클래스에 의해 (상속) 구현될 수 있습니다. 그리고 각 클래스는 고유한 동작을 가질 수 있습니다. ArrayListLinkedList가 List 인터페이스의 두 가지 다른 구현인 것처럼 말입니다 . "

따라서 우리는 다른 구현뿐만 아니라 구현을 포함하는 클래스도 숨깁니다(코드의 모든 곳에서 인터페이스를 사용할 수 있음). 이를 통해 프로그램이 실행되는 동안 일부 개체를 다른 개체로 매우 유연하게 교체할 수 있으므로 개체를 사용하는 클래스에 대한 지식 없이도 개체의 동작을 변경할 수 있습니다.

다형성과 함께 이것은 매우 강력한 기술입니다. 현재 우리가 왜 이것을 해야 하는지는 분명하지 않습니다. 인터페이스가 삶을 크게 단순화하는 방법을 이해하려면 수십 또는 수백 개의 클래스로 구성된 프로그램을 먼저 접해야 합니다.

2) 다중 상속.

Java에서 각 클래스는 하나의 상위 클래스만 가질 수 있습니다. 다른 프로그래밍 언어에서 클래스는 종종 여러 부모 클래스를 가질 수 있습니다. 이것은 매우 편리하지만 많은 문제를 야기하기도 합니다.

Java는 절충안을 제공합니다.   여러 클래스를 상속할 수 없지만 여러 인터페이스를 구현할 수 있습니다. 인터페이스에는 여러 상위 인터페이스가 있을 수 있습니다.  클래스는 여러 인터페이스를 구현하고 하나의 상위 클래스만 상속할 수 있습니다.