В настоящее время я пытаюсь изучить JDK 8
функции и новое, что мы можем реализовать метод внутри интерфейса. Как это
interface SuperInt {
public static void method1() { // completely qualified
System.out.println("method1");
}
public default void method2() { // completely qualified
System.out.println("method2");
}
public void method3(); // completely qualified
}
Но когда я попытался расширить этот интерфейс и попытался реализовать его во вспомогательном интерфейсе, возникла ошибка времени компиляции.
Абстрактные методы не определяют тело
interface SubInt extends SuperInt {
public void method3() { // compile time error
}
}
Если можно оставить реализованные методы в интерфейсе, то почему это будет давать ошибку, когда мы пытаемся реализовать abstarct-метод суперинтерфейса в его субинтерфейсе?
Вы не можете реализовать абстрактный метод внутри interface
и SubInt
все еще является, interface
а неclass
как
interface SubInt extends SuperInt
пытается расширить интерфейс, но не реализует его. Для его реализации вы должны использовать
public class SuperIntImpl implements SuperInt {
@Override
public void method3() {
}
}
С другой стороны, method2
это default
метод, поэтому он компилируется с реализацией.
Относящиеся к примеру SubInt
и SuperInt
с перегруженной по умолчанию реализации в SubInt
, надеюсь , этот пример прояснит вещи:
public interface SuperInt {
void method3();
void method4();
}
public interface SubInt extends SuperInt {
@Override
default void method3() {
System.out.println("Inside SubInt");
}
}
в то время как реализация SubInt
может теперь выбрать переопределение или нет method3
, это все еще необходимо реализовать method4
как
public class SubIntImpl implements SubInt {
@Override
public void method4() {
}
// can reuse the implementation of the 'method3'
}
и для любой его реализации по- SuperInt
прежнему необходимо иметь собственную реализацию как для, так method3
и дляmethod4
public class SuperIntImpl implements SuperInt {
@Override
public void method3() {
// must have my own implementation
}
@Override
public void method4() {
// must have my own implementation
}
}
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения