Java 8은 기본 메소드를 추가하여 인터페이스의 구현 클래스에 영향을주지 않고 인터페이스에 새로운 기능 기능을 추가 할 수 있습니다. 아래 예제로 이것을 설명해 봅시다.
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 계면 {
public static void main (String [] args) {
}
@보수
public void sayssomething () {
// TODO 자동 생성 메소드 스텁
}
}
인터페이스 인터페이스 인터페이스 {
공개 void sayssomething ();
}
위의 코드는 MyClass 클래스가 Interfacesa 인터페이스의 SERMETHENG () 메소드를 구현 함을 보여줍니다. 이제 Interfacesa 인터페이스에 새로운 sayhi () 메소드를 추가합니다. 이 작업이 완료되면 Sayhi ()의 구현 방법을 제공하지 않으면 MyClass 클래스를 컴파일 할 수 없습니다.
기본 메소드는 인터페이스에 의해 정의 된 메소드의 액세스 수정 자에 키워드 기본값을 추가하면 구현 클래스가 메소드 구현을 제공 할 필요가 없습니다. 예를 들어:
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 계면 {
public static void main (String [] args) {
}
@보수
public void sayssomething () {
// TODO 자동 생성 메소드 스텁
}
}
인터페이스 인터페이스 인터페이스 {
공개 void sayssomething ();
기본 공개 void sayhi () {
System.out.println ( "Hi");
}
}
모든 기본 방법의 구현을 제공해야합니다. 따라서 기본 메소드는 코드를보다 유연하게 만들고 인터페이스에서이를 구현하는 방법을 작성할 수도 있습니다. 구현 된 메소드는 기본 메소드로 구현됩니다.
그렇다면 여러 인터페이스에 충돌이 있으면 어떻게해야합니까?
Java 클래스는 여러 인터페이스를 구현할 수 있으므로 두 개 이상의 인터페이스에 동일한 이름의 기본 인터페이스 메소드가있는 상황이있을 수 있습니다. 프로그램이 실행될 때 Java Virtual Machine이 실행 중이므로 사용하려는 기본 메소드가 명확하지 않습니다. 이로 인해 컴파일 오류가 발생합니다.
다음 예를 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 계면, 인터페이스 {
public static void main (String [] args) {
MyClass MC = New MyClass ();
Mc.sayhi ();
}
@보수
public void sayssomething () {
// TODO 자동 생성 메소드 스텁
}
}
인터페이스 인터페이스 인터페이스 {
공개 void sayssomething ();
기본 공개 void sayhi () {
System.out.println ( "Interfacea의 HI");
}
}
인터페이스 인터페이스 인터페이스 {
기본 공개 void sayhi () {
System.out.println ( "Hi From Interfaceb");
}
}
컴파일을 전달할 수 없으며 다음 오류를보고합니다.
"Parameters () 및 ()가있는 Sayhi라는 기본 메소드는 Type Interfaceb 및 Interfacea에서 상속됩니다."
myclass 클래스에서 sayhi () 메소드가 무시되지 않는 한 :
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 계면, 인터페이스 {
public static void main (String [] args) {
MyClass MC = New MyClass ();
Mc.sayhi ();
}
@보수
public void sayssomething () {
// TODO 자동 생성 메소드 스텁
}
@보수
public void sayhi () {
System.out.println ( "MyClass에서 Sayhi ()의 구현");
}
}
인터페이스 인터페이스 인터페이스 {
공개 void sayssomething ();
기본 공개 void sayhi () {
System.out.println ( "Interfacea의 HI");
}
}
인터페이스 인터페이스 인터페이스 {
기본 공개 void sayhi () {
System.out.println ( "Hi From Interfaceb");
}
}
호출 할 인터페이스의 sayhi () 메소드를 지정하려면 다음을 수행 할 수 있습니다.
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 계면, 인터페이스 {
public static void main (String [] args) {
MyClass MC = New MyClass ();
Mc.sayhi ();
}
@보수
public void sayssomething () {
// TODO 자동 생성 메소드 스텁
}
@보수
public void sayhi () {
interfacea.super.sayhi ();
}
}
인터페이스 인터페이스 인터페이스 {
공개 void sayssomething ();
기본 공개 void sayhi () {
System.out.println ( "Interfacea의 HI");
}
}
인터페이스 인터페이스 인터페이스 {
기본 공개 void sayhi () {
System.out.println ( "Hi From Interfaceb");
}
}
대답이 매우 간단합니까?