C#에서 동일한 메소드 (예 : F())를 가진 두 개의 기본 인터페이스가있는 경우 명시 적 구현을 사용하여 다른 impl을 수행 할 수 있습니다. F()에 대해. 이렇게하면 현재 시점에 해당하는 개체를 다르게 처리 할 수 있습니다. IMyInterface1 또는 IMyInterface2. 자바에서도 가능합니까?Java에있는 인터페이스의 C# "명시 적 구현"입니까?
15
A
답변
25
아니요, Java에서 C#의 명시 적 인터페이스 구현과 같은 것이 없습니다.
Java는 공변 (covariant) 리턴 유형을 가지고 있으므로 인터페이스가 지정하는 것보다 더 엄격하게 유형화 된 구현을 제공하려면 괜찮습니다.
interface Foo
{
Object getBar();
}
public class Test implements Foo
{
@Override
public String getBar()
{
return "hi";
}
}
C 번호는 것을 허용하지 않을 - 그리고 주변의 방법 중 하나는 일반적으로 인터페이스 구현이라는보다 구체적인 공개 방법 (명시 적으로 인터페이스를 구현하고 가지고 일반적으로 : 예를 들어,이 괜찮습니다).
0
메서드가 오버로드 된 경우에만이 작업을 수행 할 수 있습니다. 다른 일을 할 것으로 예상되는 두 가지 방법이있는 경우 IMHO라는 다른 이름을 사용해야합니다.
-17
아니요 Java에 표시해서는 안됩니다. 그것은 좋은 디자인으로 괴롭혀 질 수없는 사람들에게 던질 또 하나의 뼈입니다.
인터페이스의 명시 적 구현은 절대로 필요하거나 사용해서는 안됩니다. 이 문제를 해결하는 더 좋은 방법이 있습니다.
3
Java의 익명 인터페이스 구현 메커니즘을 사용하여 비슷한 효과를 얻을 수 있습니다.
는 예를 참조하십시오
interface Foo {
void f();
}
interface Bar {
void f();
}
public class Test {
private String foo = "foo", bar = "bar";
Foo getFoo() {
return new Foo() {
@Override
public void f() {
System.out.println(foo);
}
};
}
Bar getBar() {
return new Bar() {
@Override
public void f() {
System.out.println(bar);
}
};
}
public static void main(String... args) {
Test test = new Test();
test.getFoo().f();
test.getBar().f();
}
}
당신은 또한 개인 상속은 "좋은 디자인으로 방해 할 수없는 사람들"에 대한 것을 믿습니까? 이것이 Java에서 누락 된 또 다른 유용한 OOP 기능입니다. –
델리게이트가 Java에있을 수 없다는 것과 같은 이유 때문에 결코 Java에 없을 것입니다. google it. 자바로 한 번도 해본 적이없는 위임자와 비슷한 이유에 대한 좋은 기사가 있습니다. 그것은 당신이 당신이 그것을 할 수있는 좋은 것들을하지 못하게하기 때문에 나쁜 것입니다. 마이크로 소프트와 생태계가 생기지 않는 것. – eaglestorm
@ealgestorm, 스윙조차도 객체를 "위임 (abuse)"객체가 위임자처럼 행동하게한다는 것을 알고 있습니까? 또한 거의 모든 질문이 .NET과 관련되어 있다는 점을 조금은 즐겁습니다. –