Является ли явная реализация С# интерфейса, присутствующего в Java?

В С#, если у вас есть два базовых интерфейса с одним и тем же методом (скажем, F()), вы можете использовать явную реализацию для выполнения разных impl. для F(). Это позволяет вам по-разному относиться к объекту, соответствующему текущей точке зрения: как IMyInterface1 или IMyInterface2. Возможно ли это на Java?

Ответы

Ответ 1

Нет, нет ничего похожего на реализацию явного интерфейса С# в Java.

В плюсе, у Java есть ковариантные типы возвращаемых данных, поэтому, если вы хотите предоставить более строго типизированную реализацию, чем указывает интерфейс, все в порядке. Например, это нормально:

interface Foo
{
    Object getBar();
}

public class Test implements Foo
{
    @Override
    public String getBar()
    {
        return "hi";
    }
}

С# не позволит этого - и один из способов его использования, как правило, явно реализовать интерфейс, а затем иметь более конкретный публичный метод (обычно называемый реализацией интерфейса).

Ответ 2

Вы можете добиться аналогичного эффекта, используя механизм реализации анонимного интерфейса в 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();
    }
}

Ответ 3

Вы можете сделать это только в том случае, если методы перегружены. Если у вас есть два метода, которые, как ожидается, будут делать разные вещи, у них должны быть разные имена IMHO.

Ответ 4

Нет, и он никогда не должен присутствовать на Java. Это просто еще одна кость, чтобы бросить людей, которые не могут быть обеспокоены хорошим дизайном.

Явная реализация интерфейса никогда не должна понадобиться или использоваться. Есть лучшие способы решить проблему, которую пытается решить.