«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как Java решает проблему двусмысленности при переписывании метода нескольких интерфейсов?

Как Java решает проблему двусмысленности при переписывании метода нескольких интерфейсов?

Опубликовано в 2025-04-13
Просматривать:702

How Does Java Resolve Ambiguity When Overriding Methods in Multiple Interfaces?

переоценка неоднозначности с несколькими интерфейсами

В сфере объектно-ориентированного программирования классы могут реализовать несколько интерфейсов. Однако, когда эти интерфейсы обладают методами с идентичными подписями, возникает вопрос: как компилятор решает, какой метод интерфейса переопределен? Компилятор не различает методы, основанные на их интерфейсе. int f (); } интерфейс b { int f (); } Классный тест орудий A, B { @Override public int f () { возврат 0; } }

В этом сценарии тест реализует как A, так и B, и оба интерфейса определяют метод с именем f () с той же подписью. Переопределяя этот метод в тесте, класс эффективно переопределяет метод f () из обоих интерфейсов, хотя присутствует только одна аннотация @Override.

это связано с тем, что правила наследования Java определяют, что методы с идентичными подписями считаются «переопределимыми». В результате компилятор выбирает первый метод переоценки, с которым он сталкивается, независимо от его происхождения интерфейса.

interface A {
  int f();
}

interface B {
  int f();
}

class Test implements A, B {   
  @Override
  public int f() {  
    return 0;
  }
}   

, чтобы проиллюстрировать этот момент, давайте изменим пример следующим образом:

Gift { void present (); } Интерфейс гость { логическое настоящее (); } класс презентабельный подарок, гость { @Override public void present () { System.out.println («Присутствует как подарок!»); } }

здесь, dift.present () и guest.present () имеют несовместимые типы возврата (void vs. boolean). В результате презентабель не может реализовать оба интерфейса, поскольку они нарушают правила переоценки.

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

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3