Абстрактные методы не определяют тело - Интерфейс пытается реализовать метод суперинтерфейса, дающий ошибку времени компиляции в JDK 8

Арун Судхакаран

В настоящее время я пытаюсь изучить 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] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  3. 3

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  4. 4

    (fields.E300) Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной.

  5. 5

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  6. 6

    How to click an array of links in puppeteer?

  7. 7

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  8. 8

    Merging legends in plotly subplot

  9. 9

    ViewPager2 мигает / перезагружается при смахивании

  10. 10

    Текущая ветка не настроена для извлечения В конфигурации не найдено значение для ключа branch.master.merge

  11. 11

    How to normalize different curves drawn with geom = "step" when using stat_summary

  12. 12

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  13. 13

    Метод ошибки Illuminate \\ Database \\ Eloquent \\ Collection :: save не существует. в Laravel

  14. 14

    Ошибка «LINK: фатальная ошибка LNK1123: сбой при преобразовании в COFF: файл недействителен или поврежден» после установки Visual Studio 2012 Release Preview

  15. 15

    JavaFX TextArea как установить текст с автоматическим переносом новой строки

  16. 16

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  17. 17

    как я могу удалить vue cli 2?

  18. 18

    Отчеты Fabric Debug Craslytic: регистрация, отсутствует идентификатор сборки, применить плагин: io.fabric

  19. 19

    Elasticsearch - Нечеткий поиск не дает предложения

  20. 20

    Метки значений столбцов BarChart скрыты полем

  21. 21

    Ошибка Phusion Passenger с Rails 4 и Ruby 2.5

популярныйтег

файл