interface 상속 시 같은 이름의 method를 가지는 경우 어떻게 처리되는지 궁금했다.
다음 코드를 컴파일 해보니, 별 문제없이 컴파일 되었다.
//T.java
public interface T {
public void t();
}
//T2.java
public interface T2 {
public void t();
}
//Human.java
public class Human implements T, T2 {
@Override
public void t() {
System.out.println("talk!!");
}
}
//Main.java
public class Main {
public static void main(String[] args) {
Human h = new Human();
h.t();
}
}
stack overflow의 답변에 따르면
위의 T.t()와 T.t2()는 Override-equivalent이기 때문에 하나의 Overriding만 필요하다고 한다.
Oracle Reference에 Override-equivalent는 다음과 같이 정의되어 있다.
"Two method signatures m1 and m2 are override-equivalent iff either m1 is a subsignature of m2 or m2 is a subsignature of m1."
subsignature는 다음과 같이 정의되어 있다.
The signature of a method m1 is a subsignature of the signature of a method m2 if either:
- m2 has the same signature as m1, or
- the signature of m1 is the same as the erasure (§4.6) of the signature of m2.
method 이름과 매개변수 type (순서 포함) 이 동일하다면, 두 함수는 same signatures 관계이다.
근데 Chap 8 Class와 Chap 9 Interface를 아무리 찾아봐도 해당 상황에 대해 허용한다는 말은 없다.
이에 대해서는 다시 공부해보고 추가해야겠다.
참고
https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2
https://stackoverflow.com/questions/2801878/implementing-two-interfaces-in-a-class-with-same-method-which-interface-method
'java' 카테고리의 다른 글
[Spring] Unsatisfied dependency expressed through field (0) | 2022.01.06 |
---|---|
package 경로 추가 (Eclipse) (0) | 2021.12.31 |
Unhandled exception type 에러 처리 (Exception) (0) | 2021.12.31 |
IllegalStateException : Cannot load configuration class 해결 (0) | 2021.12.30 |
maven/gradle 설치하기 (Ubuntu 20.04) (0) | 2021.02.24 |