2010-02-16 10 views
23

Dopo un tutorial su Internet relativo allo sviluppo di Soap con Java, ho trovato this link, con un codice piuttosto insolito per me.L'estensione dell'oggetto ha uno scopo o è ridondante?

Il codice:

public class SoapService extends Object { 

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

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

Qual è il 'si estende Object' sintassi? Non ho mai incontrato questo tipo di sintassi (solo su Generics).

Questa sintassi ha uno scopo o è "semplicemente stupida"?

+0

C'è anche una dozzina di altre risposte a questo - cerca su SO e guarda. – Kylar

risposta

34

A meno che la classe Object non sia effettivamente la classe java.lang.Object (il tutorial non include le importazioni, quindi è difficile da vedere), lo extends Object è ridondante.

+18

Il solo pensiero della confusione causata dal nominare un altro oggetto di classe. * shudder * – Yishai

+1

Anche se ci fossero importazioni, sarebbe usando java.lang.Object a meno che non fosse scritto come public class SoapService extends some.other.Object {...} –

+2

C'è org.omg.CORBA.Object , ma non sembra probabile che sia pertinente qui. –

3

Significa solo che eredita direttamente dalla classe Object. Here è più sull'ereditarietà in Java.

+3

Non sprecare il mio -1 ma questo è inutile. – orbfish

9

Tutti gli oggetti in Java estendono implicitamente Object, quindi direi che è ridondante.

6

Tutte le classi estendono in modo implicito l'oggetto in modo che la codifica ridondante non abbia alcun impatto.

+0

Questa è la ragione per cui l'ho chiesto ... Probabilmente l'autore del tutorial stava progettando di scrivere un codice "originale". :) –

2

No. Fa solo esplicitamente qualcosa che è implicito.

2

Non necessario. Ogni classe in Java estende Object ad un certo livello. Lasciare fuori, a meno che non sia necessario chiarire qualcosa di specifico.

1

mio voto, semplicemente stupido - ma poi ho giocare solo con Java ...

Ma ogni classe eredita dalla classe di oggetti per quanto ne so ...

1

E 'boilerplate legale ma inutile . Tutto estende Object, quindi le specifiche del linguaggio ti permettono di lasciarlo fuori, e in genere dovrebbe essere lasciato fuori (alcuni scrittori di standard di codifica non sono d'accordo).

la situazione è la stessa in generici (si estende Object è implicito e ridondante), è solo che per qualche motivo (Ho visto alcuni Generics affermazione precoce buggy implementazioni hanno avuto problemi con la? Jolly) che ha preso piede un po ' più là.

2

La clausola di estensione è facoltativa come indicato in Java Language Specification. Se viene omesso, la classe è derivata da java.lang.Object. È solo una questione di stile di codice per scriverlo o non scriverlo in questo caso. Di solito è omesso.

4

sembra un po 'come codice generato - è sforzo supplementare per un generatore di codice sorgente per omettere il "estende" clausola se non è necessario, soprattutto se il generatore è basato sul modello.

2

È un codice stupido. Ogni classe in Java estende una classe Object. Non è necessario digitare questo in modo esplicito

-1

Perché non renderlo esplicito?

Sono per aggiungerlo - non tutti "implicitamente" sanno che ogni classe Java estende implicitamente Object. Scrivendolo esplicitamente non devono indovinare.

1

C'è una possibilità e la persona che l'ha creata non vuole che tu estenda alcuna classe. Ovviamente puoi sempre fare un workaround ma è l'unica cosa che riesco a trovare che abbia senso.

+0

Un buon punto in effetti! – Whimusical

0

Poiché java è un linguaggio orientato agli oggetti, supporta l'ereditarietà che eredita le proprietà di un'altra classe, ad esempio tutti gli oggetti java ereditano dalla classe java.lang.Object. Dall'esempio precedente si capisce che è la spiegazione di eredità. Nota che tutte le classi, indipendentemente dal loro stato, saranno ereditate da java.lang.Object.

0

Ogni classe che non si estende esplicitamente un'altra classe, si estende implicitamente oggetto

0

tutte le classi si estende il java.lang.Object per impostazione predefinita. Potete vederlo here

Problemi correlati