Нет, 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».