Что происходит, если два интерфейса содержат один и тот же метод по умолчанию?

Если у меня есть два интерфейса с тем же методом по умолчанию, и оба реализуют с классом / см. Эту программу.

interface alpha {
  default void reset() {
    System.out.println("This is alpha version of default");
  }
}

interface beta {
  default void reset() {
    System.out.println("This is beta version of default");
  }
}

class MyClass implements alpha, beta {
  void display() {
    System.out.println("This is not default");
  }
}

class main_class {
  public static void main(String args[]) {
    MyClass ob = new MyClass();
    ob.reset();
    ob.display();
  }  
}

тогда что будет? И также я получаю несвязанную ошибку с этой программой.

2 ответа

Решение

Вы не можете реализовать несколько интерфейсов, имеющих одинаковую сигнатуру методов Java 8 по умолчанию (без явной переопределения в дочернем классе)

, Вы можете решить это путем реализации метода, например,

class MyClass implements alpha, beta {
  void display() {
    System.out.println("This is not default");
  }

  @Override
  public void reset() {
    //in order to call alpha's reset
    alpha.super.reset();
    //if you want to call beta's reset 
    beta.super.reset();

  }
}

По сути, эти два метода одинаковы в классе, который их реализует. Если вы попытаетесь реализовать два метода в Intellij, например, вы получите только один метод. Вы не можете объявить два, даже если вы хотите иметь разные подписи для них обоих.

Другие вопросы по тегам