Интерфейс по умолчанию расширяет Object? - программирование
Подтвердить что ты не робот

Интерфейс по умолчанию расширяет Object?

Если вы определяете интерфейс, как показано ниже

interface I1{

}

В любом разделе кода, который вы можете написать, например

I1 i1;
i1.equals(null);

Затем, откуда приходит метод equals, интерфейс также расширяет класс класса Object?, если это правда, как интерфейс может расширять класс?

Предположим, что интерфейс расширяет объект суперкласса, тогда, если вы видите, почему интерфейс коллекции, такой как Set thave, определяет метод equals() и hashCode(). Весь класс расширяет класс Object, поэтому, если вы определяете какой-либо абстрактный метод в интерфейсе, который присутствует в классе Object, тогда кто реализует интерфейс, им не нужно реализовывать этот метод. Как в нижеприведенном коде

interface I1{
String toString();
}

class A implements I1{

}

Здесь класс A не нуждается в реализации метода toString(), поскольку он присутствует в классе Object. Тогда какова цель определения этого метода в интерфейсе коллекции, поскольку они не могут заставить этот класс реализации реализовать этот метод.

4b9b3361

Ответ 1

Затем, откуда приходит метод equals, интерфейс также расширяет класс класса Object?, если это правда, как интерфейс может расширять класс?

Спецификация языка Java имеет дело с этим явно.

Из раздела 9.2:

Если интерфейс не имеет прямых суперинтерфейсов, тогда интерфейс неявно объявляет открытый метод абстрактных членов m с сигнатурой s, возвращаемым типом r и предложением th, соответствующим каждому методу публичного экземпляра m с сигнатурой s, типом возврата r и throws, объявленный в Object, если только метод с одной и той же сигнатурой, таким же типом возвращаемого значения и предложение совместимого броска явно объявлено интерфейсом.

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

Другими словами, хотя сам интерфейс не расширяет Object, известно, что любая реализация будет.

Здесь класс A не нуждается в реализации метода toString(), поскольку он присутствует в классе Object. Тогда какова цель определения этого метода в интерфейсе коллекции, поскольку они не могут заставить этот класс реализации реализовать этот метод.

Обычно это делается для ясности, например. для документирования того, что ожидается от реализации в терминах членов, объявленных в Object.

Ответ 2

Каждый класс неявно расширяет Object и поэтому наследует каждый (не закрытый) метод класса Object.

Каждый экземпляр имеет класс и поэтому имеет весь метод Object.

Является ли экземпляр интерфейсом или нет, совершенно не имеет отношения к этой точке.

Объект - это класс, а интерфейсы не могут расширять классы, поэтому "нет" - интерфейс не наследует ничего из любого класса.