Метод по умолчанию интерфейса Java8
Что такое метод по умолчанию и почему есть метод по умолчанию?
Проще говоря, интерфейс может иметь методы реализации, и нет необходимости внедрять класс для реализации его методов. Просто добавьте ключевое слово по умолчанию перед именем метода.
Зачем вам эту функцию? Прежде всего, предыдущий интерфейс был обоюдоострым мечом. Преимущество заключалось в том, что он был нацелен на абстрактное, а не конкретное программирование. Недостатком было то, что когда было необходимо изменить интерфейс, было необходимо изменить все классы, которые реализовали интерфейс. Текущая структура сбора до Java 8 не имела метода Foreach. Решение, о котором можно рассмотреть, состоит в том, чтобы добавить новые методы и реализации в соответствующие интерфейсы в JDK. Однако для опубликованной версии невозможно добавить новые методы в интерфейс, не влияя на существующую реализацию. Итак, метод по умолчанию введен. Их цель - сделать интерфейс не введенным несовместимым с существующими реализациями.
Как показано ниже,
Public Interface Animal {по умолчанию void eat () {System.out.println ("Метод по умолчанию животных"); }} Интерфейс объявлен, и внутри есть только один метод по умолчанию. Затем напишите конкретный класс для реализации этого интерфейса.
Общедоступный класс Dog реализует Animal {public void sayhi () {System.out.println ("Dog"); } public static void main (String args []) {Dog Dog = new Dog (); Dog.eat (); }}В конкретном классе нет необходимости переопределять метод по умолчанию, но необходимо реализовать абстрактные методы.
Множественное наследство методов по умолчанию
Код, показанный ниже,
публичный интерфейс a {void dosomething (); по умолчанию void hello () {System.out.println ("Привет, мир из интерфейса A"); } по умолчанию void foo () {System.out.println ("foo из интерфейса a"); }} интерфейс B расширяет {по умолчанию void hello () {System.out.println ("Hello World из интерфейса B"); A.Super.Hello (); this.foo (); A.super.foo (); }} класс C реализует b, a {@Override public void doSomething () {System.out.println ("c объект нужно что -то сделать"); } public static void main (string args []) {a obj = new c (); obj.hello (); // Вызов B метод B obj.dosomething (); }}Результат печати:
Hello World от интерфейса Bhello World из интерфейса Afoo от интерфейса Afoo от объекта интерфейса AC нужно сделать что -то
obj.hello () вызывает метод по умолчанию в интерфейсе B. В то же время метод по умолчанию в интерфейсе B вызывает метод по умолчанию в родительском интерфейсе.
Давайте посмотрим на другой пример и подумаем о методе по умолчанию с одним и тем же именем в нескольких наследованиях, как показано ниже.
публичный интерфейс d {по умолчанию void hello () {System.out.println ("Hello World From D"); }} интерфейс e {по умолчанию void hello () {System.out.println ("Hello World From E"); }} класс F реализует d, e {@override public void hello () {System.out.println ("Hello World F Class"); D.Super.Hello (); E.super.hello (); } public static void main (string args []) {f f = new f (); f.Hello (); }} Нам нужно сформулировать метод по умолчанию, который интерфейс вызовет следующим образом:
D.Super.Hello (); E.super.hello ();
Другой пример метода по умолчанию Java8 :
Java8 добавил метод по умолчанию для интерфейса, что означает, что в интерфейсе может быть реализован. Этот метод реализации является реализацией по умолчанию, и вы также можете переписать этот метод по умолчанию в классе реализации интерфейса.
Следующий пример:
открытый класс AppInterfedefefaultmethod {public Static Interface defaultmethoddemo {// Определить метод по умолчанию с ключевым словом по умолчанию, которому предшествует метод по умолчанию, за которым следует декларация метода и метод кузова по умолчанию void demo (String input) {System.out.println (input); } void doSomething (); } public Static Class Democlass реализует Defaultmethoddemo {@Override public void doSomething () {System.out.println ("Do Do"); }} public static class democlassoverRidedemo реализует defaultmethoddemo {// Переписать метод по умолчанию @override public void demo (строковый вход) {system.out.println ("demo" + input + "методом переопределения"); } @Override public void doSomething () {System.out.println ("сделать что -нибудь"); }} public static void main (string [] args) {defaultmethoddemo demo = new democlass (); demo.demo ("ABC"); Defaultmethoddemo demooverride = new DemoclassoverRidedemo (); demooverride.demo ("ABC"); }}Выше приведено подробное введение в метод по умолчанию интерфейса Java8, и я надеюсь, что это будет полезно для обучения каждого.