2010-02-16 11 views
23

Siguiendo un tutorial en Internet sobre el desarrollo de Soap con Java, encontré this link, con un código bastante inusual para mí.¿Extiende el objeto tiene un propósito o es redundante?

El código:

public class SoapService extends Object { 

    /** Creates new SoapService */ 
    public SoapService() { 
    } 

/** This is the SOAP exposes method 
*/ 
    public String sayGreeting(String name) 
    { 
     return "Hello "+name; 
    } 
} 

¿Qué significa la 'extiende Objeto' sintaxis? Nunca me he encontrado con este tipo de sintaxis (solo en Generics).

¿Tiene esta sintaxis algún propósito o es 'simple tonto'?

+0

También hay alrededor de una docena de respuestas más a esto - busque en SO y mire. – Kylar

Respuesta

34

A menos que la clase Object no sea en realidad la clase java.lang.Object (el tutorial no incluye las importaciones, por lo que es difícil de ver), el extends Object es redundante.

+18

La sola idea de la confusión causada por el nombramiento de otro objeto de clase. * estremecimiento * – Yishai

+1

Incluso si hubiera importaciones, entonces usaría java.lang.Object a menos que se escribiera como public class SoapService extiende algún.otro.Objeto {...} –

+2

Hay org.omg.CORBA.Object , pero no parece ser relevante aquí. –

3

Simplemente significa que hereda directamente de la clase Object. Here es más acerca de la herencia en Java.

+3

No voy a perder mi -1, pero esto es inútil. – orbfish

9

Todos los objetos en Java extienden implícitamente Object, entonces diría que es redundante.

6

Todas las clases extienden el objeto implícitamente de todos modos, así que es solo una codificación redundante que no tiene ningún impacto.

+0

Esa es la razón por la que he preguntado ... Probablemente el autor del tutorial estaba planeando escribir un código 'originial'. :) –

2

No. Simplemente está haciendo explícitamente algo que está implícito.

2

No es necesario. Cada clase en Java extiende Object en algún nivel. Déjalo fuera, a menos que necesites aclarar algo específico.

1

Mi voto, llanura tonto - pero entonces sólo juego con Java ...

Pero cualquier clase hereda de la clase de objeto por lo que yo sé ...

1

Es repetitivo legal, pero inútil . Todo amplía el objeto, por lo que la especificación del idioma le permite omitirlo, y generalmente debe omitirse (algunos escritores de estándares de codificación no están de acuerdo).

La situación es la misma en genéricos (extends Object es implícito y redundante), es solo que por alguna razón (he visto algunos reclamos de errores iniciales implementaciones de Generics tenían problemas con el comodín?) Se ha contagiado un poco más allí.

2

La cláusula Extends es opcional como se indica en Java Language Specification. Si se omite, la clase se deriva de java.lang.Object. Es solo cuestión de estilo de codificación escribirlo o no escribirlo en este caso. Por lo general, se omite.

4

Se parece un poco al código generado - es un esfuerzo extra para un generador de código fuente a omitir cláusula "extends" si no es necesario, especialmente si el generador está basado en plantilla.

2

Es un código tonto. Cada clase en Java extiende una clase Object. No es necesario escribir esto explisitly

-1

¿Por qué no hacerlo explícito?

Estoy por agregarlo - no todos "implícitamente" saben que cada clase de Java extiende implícitamente Object. Al escribirlo explícitamente, no tienen que adivinar.

1

Hay una posibilidad y esa es la persona que la hizo no desea que extienda ninguna clase. Siempre puede hacer una solución, por supuesto, pero eso es lo único que se me ocurre que tiene sentido.

+0

¡Buen punto de hecho! – Whimusical

0

Como Java es un lenguaje orientado a objetos, admite la herencia que hereda las propiedades de la otra clase, por ejemplo, todos los objetos java heredan de la clase java.lang.Object. Del ejemplo anterior se entiende que es la explicación de herencia Tenga en cuenta que todas las clases, tanto si lo dicen como si no, serán heredadas de java.lang.Object.

0

Cualquier clase que no se extiende explícitamente otra clase, de manera implícita expande Object

0

todas las clases se extiende la java.lang.Object por defecto. Puede verlo here

Cuestiones relacionadas