В сфере объектно-ориентированного программирования классы могут реализовать несколько интерфейсов. Однако, когда эти интерфейсы обладают методами с идентичными подписями, возникает вопрос: как компилятор решает, какой метод интерфейса переопределен? Компилятор не различает методы, основанные на их интерфейсе. 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