interface default 메소드 질문입니다.
466
9 câu hỏi đã được viết
Foo, Bar 인터페이스에서 printUppercase 라는 default 메소드로 각각 정의후
DefaultFoo에서 Foo, Bar를 implements 하였는데 영상처럼 컴파일 오류가 나지않습니다.
현재 자바 11을 사용중인데 자바11에서는 인터페이스의 디폴트 메소드의 사용법? 이 재정의 된건가요?
Câu trả lời 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
232
2
기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)
0
518
2
static 과 metaspace 관련 질문있습니다.
0
708
0
Map의 가장 큰 특징이 key는 null이 아니다
0
2381
2
Optional 질문드립니다.
0
472
0
인텔리제이 콘솔창
0
581
0
Supplier를 쓰는 이유
0
1360
1
allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드
0
709
1
[참고] LTS주기
0
471
1
orElseThrow()
1
1087
2
findFirst함수
0
359
1
메서드 레퍼런스
1
478
1
primitive type 질문
0
303
1
FunctionalInterface 상속 관계 질문
0
293
1
함수형 인터페이스를 왜 사용하나요?
1
497
1
while문 세미콜론
0
432
1
flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!
0
408
1
람다식과 익명 클래스
0
321
1
steam api 예제 git 주소
3
785
1
thread.sleep질문
0
386
2
.orElse 매개변수 질문
0
265
1
isPresent( ) 와 null 질문
0
336
1
예제 코드 질문
2
290
1
코드 질문있습니다.
0
238
1

