Questa è forse la domanda più frequente in tutte le interviste relative allo sviluppo del software o alla garanzia della qualità del software. Ho visto dalla mia esperienza che spesso molti di noi si confondono o dimenticano la definizione e l’uso di classi e interfacce astratte. Quindi, voglio renderlo il più semplice in modo che nessuno abbia mai più problemi con esso.
La classe astratta e le interfacce sono due perni molto vitali nel concetto di programmazione orientata agli oggetti.,
All’inizio, spiegherò la classe astratta e il suo utilizzo, e in seguito ci sposteremo nelle interfacce.
La classe astratta non è niente di speciale da guardare quando si desidera differenziare con una classe normale. Ma ha alcuni metodi che non sono implementati, o solo dichiarati, non definiti. In tal caso, tutti questi metodi e la classe stessa vengono rinominati con la parola chiave “abstract”.
Una classe astratta può avere uno o più numeri di metodi non implementati.,
Come una classe astratta non è corretta, o non ha metodi idealmente definiti rispetto a una classe normale, quindi le classi astratte non possono essere istanziate, il che significa che non possiamo creare oggetti diretti di classi astratte.
Le classi che ereditano/estendono questa classe astratta, devono implementare/definire tutti i metodi astratti della classe astratta genitore.
Se una classe non riesce a definire uno qualsiasi dei metodi astratti, quella classe diventa anche una classe astratta.,
Usage (An imaginary case study):
Supponiamo, nel 1995, di aver progettato una classe di auto che aveva una caratteristica aggiuntiva: poteva volare. Hai progettato la classe car molto bene, tutti i tuoi metodi erano molto standard ed efficienti, ma allora sapevi che era del tutto impossibile implementare il metodo carFlying (). Quindi, hai appena mantenuto il metodo carFlying() vuoto o non implementato (ora sai che è un metodo astratto e una classe!).,
Oggi, voglio implementare quella macchina volante che hai già progettato e la tecnologia non è più impossibile. L’auto che costruirò ha tutte le caratteristiche simili alla tua auto, e inoltre può volare. Quindi, cosa posso fare è che posso semplicemente ereditare (”extends ” -per Java) la tua classe astratta e devo definire/implementare quel metodo astratto carFlying (). ecco qui! la nostra macchina volante è pronta a rotolare.
Quindi, ogni volta che abbiamo alcune caratteristiche o comportamenti comuni tra vari oggetti, possiamo creare una classe astratta generale con quella caratteristica come metodo implementato., Ma quegli oggetti potrebbero avere comportamenti distinti, in tal caso dichiareremo un metodo astratto e implementeremo quei metodi astratti in modo diverso in base alle esigenze dell’oggetto.
Esempio di classe astratta:
Ancora una volta, consideriamo un esempio, un gruppo di lottatori ottiene la stessa quantità di denaro all’ora per giocare. ma hanno diverso tema musicale e la strategia di lotta di finitura. Quindi, possiamo mantenere il metodo di pagamento uguale per tutti e averlo implementato in una classe denominata Wrestler., dichiariamo i metodi themeMusic() e finisher() come astratti perché questi due devono essere implementati in modo diverso per oggetti diversi in alcune altre classi che ereditano la nostra classe astratta Wrestler.
e il principale.java:
Interfaccia:
Se hai passato correttamente la parte superiore di questo tutorial, capire l’interfaccia sarà molto più facile per te.
L’interfaccia non è una classe, è solo un’interfaccia. Ha alcuni metodi senza corpo al suo interno, solo la firma del metodo (sono fondamentalmente metodi astratti!,), e può avere alcune variabili finali e statiche. E, una classe tipica “implementa” le interfacce, non “estende”.
È possibile implementare più interfacce (generalmente ereditate) alla volta.
Le classi che ereditano / implementano le interfacce, devono definire tutti i metodi astratti dell’interfaccia.
I metodi all’interno delle interfacce sono per impostazione predefinita pubblici, vuoti e astratti.
l’interfaccia è una sorta di ereditarietà multipla nel linguaggio di programmazione Java.
Non possiamo istanziare anche le interfacce proprio come le classi astratte., Perché sono entità incompleta, e non dovrebbe essere permesso di essere realizzato. Ma a volte un’attività come l’istanziazione può essere applicabile con l’aiuto della classe interna anonima. Non e ‘ questo il nostro ordine del giorno oggi.
Uso di interfaccia:
Interfacce risparmiare tempo di codifica. Può contenere alcune variabili statiche e finali a cui è possibile accedere globalmente. e alcuni metodi che sono astratti e prontamente disponibili per un ulteriore utilizzo in qualsiasi momento a chiunque implementi l’interfaccia.,
Esempio di interfaccia:
Nell’esempio precedente di classe astratta, abbiamo visto che un metodo era lo stesso per tutti quelli che avevano un corpo all’interno della classe astratta e altri metodi erano astratti. ma per le interfacce, tutti i metodi sono ora solo firma. La classe StoneCold implementa interfaccia Wrestler e definire tutti e tre i metodi astratti di esso in base alle sue esigenze.
Questa volta, diversi lottatori ottenere diversa quantità di denaro all’ora. Quindi, è il più conveniente mettere lo stesso metodo di abstract e definirlo altrove in base alle esigenze dell’oggetto.,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
e la seguente classe implementa l’interfaccia Wrestler.
Per il principale.java:
Per l’avvio dell’oggetto in caso di classe astratta o interfaccia, è possibile tenere a mente quanto segue,
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.