2015년 9월 2일 수요일

(자바8 인터페이스 다중상속)Java8 Multiple Inheritance, default method

(자바8 인터페이스 다중상속)Java8 Multiple Inheritance, default method

아래처럼 JAVA8의 인터페이스 default method를 사용하게 되면 중복선언으로 오류가 발생한다. Ojc, OjcEdu에서 javaStudy를 중복선언했으므로 Programmer implements Ojc, OjcEdu 부분에서 어떤 javaStudy를 사용할지 몰라 오류가 발생할 것이다.

[오류내용]
Duplicate default methods named javaStudy with the parameters () and () are inherited from the types OjcEdu and Ojc


package java1;

interface Ojc {
//default method
default void javaStudy() {
System.out.println("오라클자바커뮤니티 자바8 공부");
}
}

interface OjcEdu {
//default method
default void javaStudy() {
System.out.println("오라클자바커뮤니티 자바8 공부");
}
}

class Programmer implements Ojc, OjcEdu {
}


위의 문제는 Programmer 클래스에서 javaStudy() 메소드를 재정의함으로서 해결할 수 있는데.. 아래 예제를 보자.


package java1;

interface Ojc {
//default method
default void javaStudy() {
System.out.println("오라클자바커뮤니티 자바8 공부1");
}
}

interface OjcEdu {
//default method
default void javaStudy() {
System.out.println("오라클자바커뮤니티 자바8 공부2");
}
}

class Programmer implements Ojc, OjcEdu {
public void  javaStudy() {
System.out.println("오라클자바커뮤니티 자바8 공부3");
Ojc.super.javaStudy();
}
}

public class Hello2 {
public static void main(String[] args) {
Programmer p = new Programmer();
p.javaStudy();
}
}

[결과]
오라클자바커뮤니티 자바8 공부3
오라클자바커뮤니티 자바8 공부1


Programmer 클래스에서 javaStudy() 메소드를 재정의 할 수 있으며, 필요에 따라 Ojc, OjcEdu의 javaStudy() 메소드를 호출할 수 있다. 물론 반드시 Ojc.super.javaStudy()와 같은 형식으로 호출해야 한다.

댓글 없음:

댓글 쓰기