2010-12-29 8 views
8

Posso chiamare un metodo all'interno di un'interfaccia senza implementare l'interfaccia nella mia classe?Posso chiamare un metodo che si trova all'interno di un'interfaccia senza implementare l'interfaccia?

package; 

import Contact; 

public interface IPerson{ 

    public void savePerson(Contact contact); 

} 

Ora alcuni di classe qui ...

public class HulkHogan { 

//Calling the method savePerson here 
//I dont want to implement the Interface in all. 

} 
+2

serio. So che i principianti hanno qualche problema, ma non stai nemmeno cercando di dare un senso alle tue domande. – Bozho

+2

Si chiama metodi su oggetti. Non su interfacce. Dov'è il tuo oggetto? Qual è la sua classe? – Bozho

+0

Come chiamerai il metodo senza creare oggetti di riferimento? – niksvp

risposta

6

In modo statico, è possibile dichiarare di essere chiamato. Non è necessario necessariamente implementare l'interfaccia all'interno della classe di chiamata. Per esempio:

public class HulkHogan { 
    private IPerson person; 

    public HulkHogan(IPerson person){ 
    this.person = person; 
    } 

    public void doSomething(Contant contact){ 
    //call your method here 
    person.savePerson(contact); 
    } 
} 

Ma per eseguirla, è sarà necessità di attuare da qualche parte, in quanto interfaccia descrive solo come qualcosa si comporta, ma non fornisce il comportamento reale (vale a dire non attuarla).

2

No Non può chiamare, si dovrà fornire la sua attuazione atleast

seguito di chiamare il metodo è necessario un oggetto. Non è possibile creare un'istanza interfaccia senza la sua attuazione prevista

4

Non è possibile perché il metodo non contiene una definizione (metodo di corpo). Lo scopo di un'interfaccia è di implementarlo da qualche parte in modo da avere una reale implementazione di questo metodo.

1

A meno che non si sia implement l'interfaccia o si abbia un oggetto membro di una classe che implementa l'interfaccia, non è possibile utilizzare il metodo savePerson, poiché per definizione non ha ancora implementato.

1

dovresti chiamare su un oggetto che è un'istanza dell'interfaccia, quindi o HulkHogan avrebbe dovuto implementare IPerson o un'istanza di qualcosa che implementa IPerson avrebbe dovuto essere fornito (o un'istanza all'interno, anche se che non è preferito) HulkHogan.

Più precisamente (basato anche sulle vostre precedenti domande), cosa vi aspettate di ottenere chiamando un metodo che non ha implementazione?

2

L'interfaccia è solo una definizione di metodi senza implementazione. Se non stai implementando i metodi, cosa faranno quando li chiami?

D'altra parte, un'interfaccia non è necessariamente implementata dalla classe chiamante. Quindi nel tuo caso HulkHogan può chiamare il metodo savePerson() di un altro oggetto, senza implementarlo. Ma alcune classi devono implementarlo da qualche parte per fare qualcosa.

5

È possibile in questo modo:

Person p = new IPerson{ 

    public void savePerson(Contact contact) { 
     // some code 
    } 

} 

Ora chiamare savePerson a pag. Stai implementando IPerson senza creare una classe separata.

+1

definizione runtime .... – Vishwanath

+0

Obiezione: esiste una classe anonima in questo frammento di codice. – Trejkaz

1

L'obiettivo di un'interfaccia è di imporre un contratto specifico e ben noto per un tipo di oggetto noto. Ad esempio, per tradizione tutti gli stack hanno push(), pop() e peek(). Quindi, scrivendo un'interfaccia, stai scrivendo espressamente un contratto che dovrebbe seguire chiunque scriva una pila.

Per mettere in un altro modo, è un modello che stabilisce che qualsiasi classe che chiama se stessa uno Stack deve implementare metodi chiamati push(), pop() e peek() come il mio esempio discute qui.

public interface StackInterface { 
    public void push(int x); 
    public int pop(); 
    public void peek(); 
} 

public class myStack implements StackInterface{ 

} 

È una tecnica orientata agli oggetti. A questo punto non avrai una compilazione perché non hai almeno implementato metodi per i metodi di interfaccia. Prima di poter utilizzare pienamente l'interfaccia, è necessario scrivere metodi corrispondenti alle firme dell'interfaccia.

0
public class HulkHogan { 

private IPerson person; 

public void setContactM(IPerson person) { 
    this.person= person; 
} 

public void doSomething(Contact contact) { 
    person.savePerson(contact); 
    } 

} 

Spero che il metodo savePerson abbia una qualche definizione in un'altra classe che lo implementa. In questo modo puoi chiamare il metodo all'interno della tua interfaccia.

+0

grazie fratello per avermi supportato – theJava

3

No, smusso ... bcoz tutti i metodi dell'interfaccia di classe sono abstract..and non potete usarli senza implementare la classe ...

1

quando dici si implementa un'interfaccia per una classe, in realtà significa che stai rispettando un contratto (o una disciplina) che è definito nell'interfaccia, cioè fornirai la definizione per il metodo nell'interfaccia, quindi senti che quell'interfaccia è un contenitore che contiene una regola,

Tu ha detto che si desidera chiamare il metodo nell'interfaccia: che non è un metodo in sé che è solo una regola definita quindi qual è il punto sta chiamando un metodo che non ha un corpo (in realtà è il suo non è un metodo in sé)

... godere

1

è possibile creare un proxy, che non fa nulla per prendere in giro fuori chiamate all'interfaccia. Tuttavia questo crea efficacemente un'implementazione in modo dinamico. Non puoi evitare di fornire un'implementazione di qualche tipo.

0

Non è possibile chiamare il metodo mentre non ha un corpo implementato. La classe di implementazione ti darà il corpo di cui hai bisogno. In Java 8, è possibile implementare il corpo del metodo all'interno della stessa interfaccia, e utilizzando il modificatore di accesso statico per esso. In questo caso è sufficiente importare l'interfaccia nella classe corrente (nel caso in cui si tratta in un pacchetto differente) e quindi è possibile chiamare il metodo direttamente.

Problemi correlati