2012-05-18 17 views

risposta

5

No, non lo è. Un'interfaccia non può essere istanziata per formare un oggetto, è non una classe.

+0

sicuro che l'interfaccia ** non può essere istanziata **? allora che ne dici di una classe anonima? –

+1

@Quoi: Come hai detto tu stesso, classe anonima - un'implementazione anonima di qualche interfaccia. –

1

Nessuna interfaccia è una sottoclasse di classe Object, poiché l'interfaccia non può estendere una classe sia implicita che esplicita.

Motivo per il costruttore è quello di creare un'istanza, poiché l'interfaccia non può essere istanziata in quanto non forniscono alcuna funzionalità sono solo un contratto solo la classe può essere istanziata quindi hanno costruttore.

1

Un'interfaccia è una raccolta denominata di definizioni di metodo (senza implementazioni). Un'interfaccia può anche includere dichiarazioni costanti.

L'interfaccia e la classe presentano alcune differenze fondamentali e uno di questi non ha costruttori. In realtà l'interfaccia non è creata per questo e non è possibile creare un'istanza dell'interfaccia, ma esiste comunque la possibilità di creare un'istanza dell'interfaccia.

interface Interface{ 
    abstract String fun(); 
} 

Interface interfc=new Interface() { 
    @Override 
    public String fun() { 
     return super.toString(); 
    } 
}; 

Type type=interfc.getClass(); 

Qui interfaccia è stata creata un'istanza come anonimo class.But ancora non è possibile inserire costruttore qui in base alla specifica del linguaggio Java. Ma puoi ancora usare la classe super che sarà immediatamente super-classe di questa classe anonima.

An anonymous class cannot have an explicitly declared constructor. 

E c'è una soluzione alternativa di questo che utilizza la variabile finale in super classe.

0

Mentre alcune persone suggeriscono di pensare alle interfacce come a "cose ​​da fare" piuttosto che a relazioni "è-a", penso che sia più utile pensare a loro "è un __er" o "è una cosa __able". Per usare un'analogia del mondo reale, un libro (dead-tree edition), una rivista cartacea rilegata, un giornale, un volantino pubblicitario promozionale, un segno e un pezzo di carta con alcune parole scritte su di esso, sono tutte cose "leggibili" ". Se qualcuno dovesse mostrare ad un'altra persona un libro e chiedere "È una cosa leggibile", la risposta sarebbe che lo è. D'altra parte, se qualcuno dovesse mostrare ad un'altra persona un libro e chiedere "Cos'è questo?" la risposta non sarebbe "Una cosa leggibile", ma più probabile "Un libro", o forse "Una quinta copia stampata della seconda edizione degli Stati Uniti del romanzo" Grandi speranze "di Charles Dickens". Qualsiasi tipo di "cosa leggibile" ha una certa identità oltre a essere semplicemente una "cosa leggibile".

Allo stesso modo con interfacce Java. Un oggetto può implementare un numero arbitrario di interfacce, ma ogni oggetto deve avere un tipo in aggiunta al set di interfacce che supporta. Si noti che è possibile definire un metodo che restituirà un nuovo oggetto di tipo sconosciuto che implementa un'interfaccia; Sarebbe come chiedere a qualcuno "Per favore portami qualcosa da leggere" senza specificare quale tipo di oggetto era desiderato. Tale metodo potrebbe selezionare un tipo di oggetto da restituire e fornire al chiamante uno che sia "leggibile". I costruttori, tuttavia, a differenza dei metodi generali, richiedono al chiamante di specificare con precisione quale tipo di oggetto è desiderato. Semplicemente specificando che un oggetto è "leggibile" non sarebbe una specifica sufficiente.

0

Nessuna interfaccia non può avere il costruttore. Perché l'interfaccia supporta l'ereditarietà multipla.Ciò significa che se una classe eredita due interfacce, a causa della concatenazione del costruttore, vi sarà un'ambiguità che verrà chiamata dal costruttore della classe.

Problemi correlati