interface default 메소드 질문입니다.
462
작성한 질문수 9
Foo, Bar 인터페이스에서 printUppercase 라는 default 메소드로 각각 정의후
DefaultFoo에서 Foo, Bar를 implements 하였는데 영상처럼 컴파일 오류가 나지않습니다.
현재 자바 11을 사용중인데 자바11에서는 인터페이스의 디폴트 메소드의 사용법? 이 재정의 된건가요?
답변 5
3
코드가 강의 중에 바뀌면서 햇갈리게 만들어 진것 같은데요.
// Foo.java
public interface Foo {
default void hello() {
System.out.println("foo");
}
}
// Bar.java
public interface Bar {
default void hello() {
System.out.println("bar");
}
}
이 상태에서 App.java를 이렇게 만들면.. 강의에서 설명드린대로 양쪽 중에 어느쪽에 들어이는 hello() 써야 하는지 애매하기 때문에 컴파일에러가 나고 App에서 overriding해서 쓰는걸 권장하는 겁니다.
public class App implements Foo, Bar {
}
그런데 컴파일 에러가 안나고 있다고 하시는 분들은 Foo나 Bar에서 한쪽을 상속 받고 있을 겁니다. 이런식으로요.
// Foo.jav
public interface Foo extends Bar{
default void hello() {
System.out.println("foo");
}
}
이러면 App.java에서 컴파일 에러가 나지 않을텐데 이유는 Foo에서 Bar를 상속받아 hello를 오버라이딩 했다고 생각하기 때문에 App에서 Foo랑 Bar를 둘 다 구현하더라도 결국에 Foo에 있는 것을 쓰게 됩니다. 즉 App 입장에서는 Bar가 불필요하게 선언된 것으로 간주할 뿐 컴파일 에러는 아니게 되는거죠.
0
각각의 인터페이스가 따로인데 같은 이름의 디폴트 메소드를 정의할때는 컴파일 에러가 나는데 그게 아니라 상속관계일경우 어느 한쪽을 오버라이딩 했다고 생각해서 컴파일에러가 발생하지 않는다는 말씀이시죠?
0
저도 동일한 현상이 나타납니다.
https://github.com/kim9x/java8to11/tree/main/src/main/java/me/pulpury/java8to11
위 url은 github 주소입니다.
관련 파일은 'App.java', 'Bar,java', 'DefaultFoo.java', 'Foo2.java' 입니다.
구현하는 곳인 'App.java'에서 DefaultFoo 인스턴스를 담아주는 타입이 Foo2냐 Bar에 따라 다른 값이 나오는 것 같긴한데.. 왜 compile 에러가 나지 않았던 것인지 알고 싶습니다.!
CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다
0
231
2
기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)
0
515
2
static 과 metaspace 관련 질문있습니다.
0
707
0
Map의 가장 큰 특징이 key는 null이 아니다
0
2377
2
Optional 질문드립니다.
0
469
0
인텔리제이 콘솔창
0
578
0
Supplier를 쓰는 이유
0
1355
1
allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드
0
706
1
[참고] LTS주기
0
468
1
orElseThrow()
1
1082
2
findFirst함수
0
356
1
메서드 레퍼런스
1
477
1
primitive type 질문
0
301
1
FunctionalInterface 상속 관계 질문
0
292
1
함수형 인터페이스를 왜 사용하나요?
1
496
1
while문 세미콜론
0
430
1
flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!
0
404
1
람다식과 익명 클래스
0
318
1
steam api 예제 git 주소
3
782
1
thread.sleep질문
0
383
2
.orElse 매개변수 질문
0
259
1
isPresent( ) 와 null 질문
0
332
1
예제 코드 질문
2
286
1
코드 질문있습니다.
0
233
1





