Nano Hash - криптовалюты, майнинг, программирование

Как использовать супер реализацию по умолчанию в интерфейсе

Будет здорово, если я смогу применить ссылку на реализацию по умолчанию к интерфейсу в следующей программе, используя super. Как и Alpha.super.reset(), пожалуйста, сообщите нам, где будет использоваться это утверждение.

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 MainClass {
  public static void main(String args[]) {
    MyClass ob = new MyClass();
    ob.reset();
    ob.display();
  }  
}

Например, если мы хотим использовать бета-версию метода reset(), то нам нужно расширить один из них двумя интерфейсами. Например: interface Beta extends Alpha, тогда будет использоваться бета-версия reset(). Но здесь мы хотим использовать super и где он будет использоваться.

26.12.2014

  • interface не позволяет реализовать. То, что вы ищете, кажется traits в scala? 26.12.2014
  • Возможно, вам следует использовать abstract class вместо этого 26.12.2014
  • Как Alpha.super.reset(); Это именно то, как вы это называете. 26.12.2014
  • @vikeng21 default был введен в Java 8. Поэтому интерфейс содержит код. 26.12.2014
  • Фактически вы можете предоставить реализацию по умолчанию в Java 8. 26.12.2014
  • Голосование против @community без комментариев контрпродуктивно, у нас здесь новый пользователь 26.12.2014
  • Например, если мы хотим использовать бета-версию метода reset(), тогда мы должны расширить один из них на два интерфейса, например: «бета-интерфейс расширяет альфа-канал», тогда будет использоваться бета-версия метода reset(). но здесь мы хотим использовать super и где он будет использоваться. 26.12.2014
  • @Philipp Claßen, спасибо, не знал об этой функции в Java 8. удалил комментарий. 26.12.2014

Ответы:


1

Синтаксис для вызова реализации метода по умолчанию, которая может исходить из двух разных интерфейсов, использует имя интерфейса, за которым следует .super, следующим образом:

class MyClass implements Alpha, Beta {
    public void reset() {
        Alpha.super.reset();
        Beta.super.reset();
    }
}

Эта реализация метода reset() вызывает реализации метода по умолчанию из обоих интерфейсов.

26.12.2014
  • Когда я пытаюсь применить приведенный выше код, который вы пишете в ответ, я получаю сообщение об ошибке, которое MyClass cannot implement reset. Пожалуйста, отредактируйте свой ответ. 26.12.2014
  • @ManoharKumar Это потому, что метод должен быть общедоступным. 26.12.2014

  • 2

    Компиляция вашего кода приведет к ошибке:

    java: класс MyClass наследует несвязанные значения по умолчанию для reset() от типов alpha и beta

    потому что компилятор не может выбрать объявление для использования в этой конфликтной ситуации.

    Вот статья для справки.

    26.12.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..