Come sappiamo che possiamo dichiarare solo la firma del metodo e inoltre non possiamo creare l'istanza di un'interfaccia. allora perché abbiamo bisogno dell'interfaccia. Non necessario il suo caricamento in JVM. Questo è anche un calo delle prestazioni. Stiamo creando l'interfaccia e diverse classi che implementano quell'interfaccia e definiscono tutti i metodi dell'interfaccia. In realtà ciò che abbiamo ottenuto da questa interfaccia. Potresti per favore darmi un esempio.perché abbiamo bisogno dell'interfaccia invece della classe e cosa stiamo ottenendo dall'interfaccia
perché abbiamo bisogno dell'interfaccia invece della classe e cosa stiamo ottenendo dall'interfaccia
risposta
L'interfaccia è che si sta costringendo il client a implementare una cosa specifica, l'implementazione rimarrà al client. Inoltre java non supporta l'ereditarietà multipla estendendo più classi è possibile implementare più interfacce.
Ad esempio: List
dichiara il metodo add(..)
tutte le implementazioni di List le implementa.
Più semplice sarebbe.
Si definisce un'interfaccia e un metodo speak()
significa che tutti gli animali dovranno parlare con diverse implementazioni differenti. L'uomo parlerà, il cane abbaierà, il leone ruggirà.
Perché dovremmo andare per creare un animale di classe. Possiamo dichiarare il speak() in ogni classe. Qual è il befit che otterremo dalla classe Animal e implementeremo speak() in tutte le sottoclassi. Ancora non ho avuto questo concetto
vantaggio principale è ereditarietà e polimorfismo [concetti fondamentali della programmazione orientata agli oggetti]
Sei specificando il comportamento di animali anche qui.
Si può avere
Animal obj = new Man();
Animal obj = getAnimalForThisCriteria(something here);//this will return some animal at runtime so you can catch instance using Animal.
Si potrebbe avere tre diversi Classe Ma, Cane, Leone con lo stesso metodo, ma non c'è modo di dire sono tutti animali a meno che non si estende o implementa classe o interfaccia comune, qui arriva il concetto di struttura
Perché dovremmo andare per creare una classe Animale in più Possiamo dichiarare il speak() in ogni classe. Qual è il befit che otterremo dalla classe Animal e implementeremo speak() in tutte le sottoclassi. Ancora non ho capito questo concetto. – Nishi
Verifica aggiornamento ......... –
@JigarJoshi buona spiegazione +1 – SpringLearner
Avere interfacce separate dalle classi consente di cancellare la separazione tra, beh, l'interfaccia di un oggetto e la sua implementazione. Senza di essi non si avrebbe alcun modo standard per indicare che alcune classi non dovrebbero contenere dettagli di implementazione.
In secondo luogo, poiché Java non supporta l'ereditarietà multipla, le interfacce rappresentano una soluzione parziale, consentendo l'ereditarietà delle funzionalità esterne della classe.
Le interfacce sono per quando ci si preoccupa solo delle capacità di un oggetto, non di come le raggiunge.
Supponiamo che si stia scrivendo il codice di controllo di alto livello per un robot. Non ti importa di come funziona veramente il robot, vuoi solo essere in grado di dire di andare avanti, indietro, girare a sinistra o destra, ecc. Senza interfacce, dovresti implementare una classe astratta chiamata AbstractRobot
che ha tutti i metodi come metodi astratti. A questo punto hai praticamente creato un'interfaccia, ma sotto forma di una classe astratta, ma che è "più pesante" del necessario.
Infine, una classe può conformarsi alle più interfacce, ma può solo ereditare da una classe. Ciò consente alcuni schemi di progettazione che si basano sull'ereditarietà multipla.
Proverò a spiegarlo in parole semplici.
Considerate il vostro gioco per computer preferito, ad esempio Counter Strike. In questo gioco, i giocatori (terroristi o antiterroristi) usano le armi.
Se insegniamo il giocatore come utilizzare weapon
(analogo a Interface), si può usare qualsiasi arma come AK47
, Maverick
, Shotgun
, Sniper
(analogo a classi che ereditano l'interfaccia Arma).
Il vantaggio di questo è considerare Bazooka
(che implementa Arma) è stato sviluppato nelle versioni future. Quindi il giocatore corrente sarà in grado di usarlo senza alcuna modifica, poiché sa come usare l'interfaccia di Armi :-)
Questo è solo un semplice esempio. Ci sono molti altri motivi per usare le interfacce.
Questo esempio funzionerebbe anche se non esistessero interfacce. Dovresti solo definire una classe madre di armi. –
Oh sì, è corretto. Ma è meglio usare Interface, dato che le classi saranno in grado di ereditare altre classi. Se usiamo la classe madre Weapon, le classi derivate non saranno in grado di ereditare da qualsiasi altra classe a causa della non esistenza dell'eredità multipla in Java. – Trivikram
Semplice. Penso che le classi Interfaces e Abstract abbiano lo stesso scopo. La differenza è che se estendi una classe astratta, non potresti estendere nessun'altra classe in Java. Motivo: Java non supporta l'ereditarietà multipla. Allo stesso tempo, puoi implementare qualsiasi numero di interfaccia per una classe.
Quali dovresti utilizzare, classi o interfacce astratte?
considerare l'utilizzo di classi astratte se uno di questi affermazioni si applicano alla vostra situazione:
- si desidera condividere il codice tra le diverse classi strettamente correlati.
- Ci si aspetta che le classi che estendono la classe astratta abbiano molti metodi o campi comuni o richiedano modificatori di accesso diversi da pubblico (come protetto e privato).
- Si desidera dichiarare campi non statici o non finali. Ciò consente di definire metodi che possono accedere e modificare lo stato dell'oggetto a cui appartengono.
considerare l'utilizzo di interfacce se uno di questi affermazioni si applicano alla vostra situazione:
- ci si aspetta che le classi non correlate sarebbe implementare l'interfaccia. Ad esempio, le interfacce Comparable e Cloneable sono implementate da molte classi non correlate.
- Si desidera specificare il comportamento di un particolare tipo di dati, ma non si preoccupa di chi ne implementa il comportamento.
- Si desidera sfruttare l'ereditarietà multipla del tipo.
L'uso più importante delle interfacce come vedo è passare il codice (anonymous inner class o lambda) a un metodo come parametro.
Esempio:
supponiamo di voler fare un metodo che può restituire il tempo di esecuzione necessario per eseguire un pezzo di codice. Vogliamo passare il nostro codice come parametro a questo metodo.
interface Code{
public void run();
}
long getExectutionTime(Code code){
long startTime = System.nanoTime();
code.run();
return System.nanoTime() - startTime;
}
getExecutionTime(new Code(){
public void run(){
//the code to be executed
}
});
in Java 8,
getExecutionTime(()->{
//the code to be executed
});
interfaccia non è altro che la sua una linea guida per la nuova implementazione fornisce alcune istruzioni per la nuova implementazione e categorizzare la funzionalità dell'oggetto .In dettagli come se creiamo un'interfaccia quindi creiamo un'istruzione per l'implementazione.
Un'analogia per un'interfaccia è pensare a una classe che utilizza un'interfaccia come se fosse una presa elettrica e pensare all'implementazione come spina. Alla presa non importa cosa c'è dietro la spina, purché si inserisca nella presa. In termini psuedocodarlo potrebbe essere scritto in questo modo:
public interface ElectricOutlet {
public void powerUp();
}
E una classe che implementa ElectricOutlet potrebbe assomigliare a questo:
public class Appliance implements ElectricOutlet {
//member variables
public void powerUp() {
//Draw power from the wall
}
...
}
Così come si usa l'interfaccia? In questo modo:
//lots of other code
ElectricOutlet out = new Appliance(); //plug the appliance into the outlet
out.powerUp; //power it up!
Ovviamente, non deve essere un'appliance collegata a una presa. Potrebbe essere una TV, un laptop o un tosaerba, ma tutti si comportano allo stesso modo dal punto di vista della presa. Quindi, come si applica alla programmazione? Allo stesso modo:
List<String> list = new ArrayList<String>(); // create a new List of Strings
Ho appena creato una nuova (vuota) lista di stringhe. Se si scopre che ArrayList non fornisce la prestazione giusta, e LinkedList funziona meglio, posso tornare indietro e cambiare quella linea a questo:
List<String> = new LinkedList<String>(); //should work better now
posso fare questo perché sia ArrayList e LinkedList implementano l'interfaccia List e quindi forniscono lo stesso comportamento (API), anche se le implementazioni interne potrebbero essere diverse. Dal punto di vista della lista, tuttavia, non importa quale sia il funzionamento interno, purché l'interfaccia sia presente. Ciò consente una grande indipendenza tra le classi e consente un maggiore riutilizzo.
- 1. Perché abbiamo bisogno fibre
- 2. Perché abbiamo bisogno della tabella virtuale?
- 3. perché abbiamo bisogno di ClassMethods e InstanceMethods?
- 4. Perché abbiamo bisogno di WCF
- 5. Perché abbiamo bisogno di Control.Lens.Reified?
- 6. Marshalling: cos'è e perché ne abbiamo bisogno?
- 7. perché abbiamo bisogno di np.squeeze()?
- 8. Perché abbiamo bisogno di funcall in Lisp?
- 9. Perché abbiamo bisogno di scalaz.stream su iteratee?
- 10. Perché abbiamo bisogno di costruttori statici?
- 11. Perché abbiamo bisogno di endianness qui?
- 12. Perché abbiamo bisogno di JWT quando abbiamo sessioni client?
- 13. perché abbiamo bisogno di zone_highmem su x86?
- 14. Perché abbiamo bisogno di un tag fieldset?
- 15. Perché abbiamo bisogno della clausola GLOB in SQLite?
- 16. Perché abbiamo bisogno di altre lingue JVM
- 17. PHP: Perché abbiamo bisogno della funzione di confronto delle stringhe?
- 18. Perché abbiamo bisogno della clausola "finally" in Python?
- 19. Perché abbiamo bisogno di Anaconda quando abbiamo pip?
- 20. Perché abbiamo bisogno di GROUP BY con FUNZIONI AGGREGATE?
- 21. perché abbiamo bisogno di Hadoop per Hypertable
- 22. Perché abbiamo bisogno di questo speciale operatore ===?
- 23. Perché abbiamo bisogno, quali vantaggi usare mangusta
- 24. Perché abbiamo bisogno di typename qui?
- 25. Perché abbiamo bisogno di ng-clic?
- 26. Perché abbiamo contiene (oggetto o) invece di contenere (E e)?
- 27. perché abbiamo bisogno di root e logger in log4j.xml
- 28. Perché abbiamo bisogno di eccezioni globali e globali nei montanti?
- 29. Perché abbiamo bisogno di metodi predefiniti in Java?
- 30. Perché abbiamo bisogno di interfacce quando esistono classi astratte?
possibile duplicato di [Java: interfaccia/classi astratte/metodo astratto] (http://stackoverflow.com/questions/2124951/java-interface-abstract-classes-abstract-method) –