Когда вы реализуете интерфейс в Java, он явный или неявный? - PullRequest
4 голосов
/ 02 марта 2010

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

Ответы [ 2 ]

5 голосов
/ 02 марта 2010

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

Пример из MSDN:

public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}

Здесь у нас есть два Paint() метода, по одному от каждого интерфейса. В Java вы можете иметь только одну реализацию Paint (). В C # у вас есть опция реализации версий для каждого интерфейса, поэтому вы получаете различное поведение в зависимости от того, как вызывается класс.

Так что, если бы я позвонил:

SampleClass c = new SampleClass();
((IControl)c).Paint();
((ISurface)c).Paint();

Я бы распечатал «IControl.Paint», а затем «ISurface.Paint».

2 голосов
/ 02 марта 2010

В Java нет различия между явным и неявным. Если у вас есть два интерфейса, которые оба объявляют метод с одной и той же сигнатурой, и класс, реализующий оба интерфейса, то метод в классе с правильной сигнатурой реализует метод в ОБА интерфейсах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...