Ответ 1
Если класс Object фактически не является классом java.lang.Object
(учебник не включает импорт, поэтому его трудно увидеть), extends Object
является избыточным.
Следуя учебному курсу в Интернете о разработке Soap с Java, я нашел эту ссылку, с довольно необычным кодом для себя.
Код:
public class SoapService extends Object {
/** Creates new SoapService */
public SoapService() {
}
/** This is the SOAP exposes method
*/
public String sayGreeting(String name)
{
return "Hello "+name;
}
}
Что с синтаксисом 'extends Object'? Я никогда не встречал такого синтаксиса (только для Generics).
Является ли этот синтаксис какой-либо целью или является "простым немым"?
Если класс Object фактически не является классом java.lang.Object
(учебник не включает импорт, поэтому его трудно увидеть), extends Object
является избыточным.
Все объекты в Java неявно расширяют Object
, поэтому я бы сказал, что это избыточно.
Все классы расширяют Object неявно, так что это просто избыточное кодирование не оказывает никакого влияния.
Выглядит немного как сгенерированный код - это лишнее усилие для генератора исходного кода, чтобы опустить предложение "extends", если оно не требуется, особенно если генератор основан на шаблонах.
Это просто означает, что он наследует непосредственно из класса Object. Здесь больше о наследовании в Java.
Нет. Он просто явно делает что-то неявное.
Это ненужно. Каждый класс в Java расширяет Object на некотором уровне. Оставьте это, если вам не нужно уточнить что-то конкретное.
Предложение Extends необязательно, как указано в Спецификация языка Java. Если он опущен, класс выводится из java.lang.Object. Это просто вопрос стиля кодирования, чтобы написать его или нет, чтобы записать его в этом случае. Обычно он опускается.
Это глупый код. Каждый класс в Java расширяет класс Object. Не нужно вводить это в явном виде
Мой голос, простой тупой - но тогда я играю только с Java...
Но любой класс наследует от класса Object, насколько я знаю...
Это законный, но бесполезный шаблон. Все расширяет Object, поэтому спецификация языка позволяет вам отказаться от него, и его вообще следует оставить без внимания (некоторые авторы стандартов кодирования не согласны).
Ситуация та же самая в generics (extends Object неявно и избыточно), это просто по какой-то причине (я видел, что некоторые утверждения о ранних ошибках в реализациях Generics имели проблемы с подстановочным знаком?), он поймал еще немного есть.
Есть одна возможность, и это тот, кто сделал это, не хочет, чтобы вы расширили любые классы. Вы всегда можете сделать обходной путь, но это единственное, что я могу придумать, что имеет смысл.
Я считаю это излишним.
В исходном коде Junit:
public class TestFailure extends Object {}
Я не знаю, почему этот класс расширяет Object.
Поскольку java является объектно-ориентированным языком, он поддерживает наследование, которое наследует свойства другого класса, например, все объекты java наследуются от класса java.lang.Object. Из приведенного выше примера понятно, что это объяснение наследование. Обратите внимание, что все классы, независимо от того, указаны они так или нет, будут наследоваться от java.lang.Object.
Любой класс, который явно не расширяет другой класс, неявно расширяет Object
все классы расширяют java.lang.Object по умолчанию. Вы можете это увидеть здесь
На самом деле, это не кажется просто избыточным, особенно при работе в среде веб-сервисов JWS.
При определении класса для типа XML, который будет транспортироваться через SOAP, я использую инструмент wsimport для извлечения клиентских зависимостей из WSDL, который создает локальные для пакета копии этих классов. Явно расширяя Object, можно легко привести между классами из двух разных пакетов.
Невыполнение этого требования приводит к ошибке компиляции при попытке использовать метод класса из пакета A, который ожидает тип аргумента класса в пакете A, и передачи объекта, сгенерированного из эквивалентного класса в пакете B.
Почему бы не сделать это явным?
Я за его добавление - не все "неявно" знают, что каждый Java-класс неявно расширяет Object
. Написав это явно, они не должны угадывать.