Реализация интерфейса и расширение класса с тем же методом - PullRequest
0 голосов
/ 25 июня 2018

Небольшие сомнения в реализации интерфейса и расширении класса. Это мой код.

public class intercheck extends inter implements in {
  public static void main(String[] args) {
    intercheck a = new intercheck();
    a.show();
  }
}

class inter {
  public void show() {
    System.out.println("Class Show");
 }
}

interface in {
  public void show() {
    System.out.println("Interface show");
  }
}

Я запустил этот код и узнал, что будет отображаться метод класса show ().

Хотите знать логику за пределами этого ..

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Краткий ответ:

interface in {
   default void show() {
     System.out.println("Interface show");
   }
}

будет выполняться тогда и только тогда, когда реализация класса не имеет реализации show() (по умолчанию был введен только из Java 8 - до того, как методы, объявленные в интерфейсе, не могли иметьтело вообще).

class intercheck реализовано в родительском классе inter, поэтому ...

class inter {
  public void show() {
     System.out.println("Class Show");
  }
}

выполняется.Вот и вся логика, стоящая за этим.

0 голосов
/ 25 июня 2018

Когда вы расширяете интерфейс, который содержит метод по умолчанию, вы можете сделать следующее:

Не упоминать метод по умолчанию вообще, что позволяет вашему расширенному интерфейсу наследовать метод по умолчанию.

С этим из Java Docs У вас есть метод из class inter.Даже если не установлено значение по умолчанию, он будет использовать ваш метод суперкласса.

И чтобы сделать вывод, вы можете прочитать это

Методы интерфейса

Методы по умолчанию и абстрактные методы в интерфейсах наследуются как методы экземпляра.

Однако, когда супертипы класса или интерфейса предоставляют несколько методов по умолчанию с одной и той же подписью, компилятор Java следует правилам наследования для разрешения конфликта имен.

С Документы Java

0 голосов
/ 25 июня 2018

Когда вы реализовали show() в суперклассе и расширили класс с ним, класс унаследовал show() от суперкласса, реализовав тем самым то, что было запрошено интерфейсом.

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