Un mio amico ha detto che non tutte le interfacce sono astratte. Non ho la possibilità di discuterne con lui, ma mi fa pensare a un'interfaccia non astratta in nessun tipo di linguaggio.
Esiste un'interfaccia non astratta?
Risposta semplice alla tua domanda: No, il tuo amico ha torto.
Un'interfaccia non fornisce l'implementazione dei metodi che definisce. Avrebbe senso se potessimo istanziare uno di quelli? Ovviamente no. Le interfacce sono solo questo, un'astrazione.
Ovviamente questo presuppone che quando si dice interface
, si pensi alla caratteristica della lingua dell'interfaccia come definita da C #, Java, C ++, ecc. con la parola chiave interface
. Nel caso in cui il tuo amico indichi un'interfaccia API, la domanda non ha proprio senso per me. Le API possono consentire di estendere le funzionalità attraverso la sottoclasse o aderendo a un particolare contratto come definito da un'interfaccia o una classe esistente del sistema.
Sì.
L'idea di un'interfaccia (cioè una descrizione delle strutture fornite e della loro semantica) è intrinsecamente astratta.
Tuttavia, la domanda sembra confondere questo con il meccanismo con cui un'interfaccia di questo tipo (piccolo i ) può essere reificata in alcune lingue che forniscono un Interface
(grande i ) per questo scopo.
Inoltre, c'è comunque più di una cosa che potresti desiderare di astrarre:
Dipende molto dal significato che il tuo amico ha dato alla parola interfaccia .
Quindi questo significa che i tipi di interfaccia forniti da diversi linguaggi (come il citato sopra: C #, Object Pascal (Delphi o FPC), Java, ecc.) quindi la risposta è no
In questo caso, l'interfaccia è un contratto sui metodi, senza alcuna forma di implementazione.
In questo caso, anche una classe astratta non pura può essere considerata un'interfaccia. In questo caso, il progettista ha anche come implementare il comportamento di base predefinito (come lanciare eccezioni su metodi virtuali non implementati che non sono astratti) su quella classe base.
Quindi, se è il caso, quindi sì quelle "interfacce" non possono essere astratte.
No.
L'interfaccia dalla semplice definizione è l'astrazione dell'API che la classe può implementare. Se non è astratto, non è un'interfaccia.
Le interfacce non devono essere astratte. Esempio:
class Foo {
public:
void printHello () {
printf("Hello");
}
};
Qui Foo
è una classe concreta con un'interfaccia printHello()
. Foo
non è astratto.
Tutte le risposte precedenti sono corrette. Ma questo è il modo in cui lo capisco.
Interface
sono solo definizioni di servizio. Per esempio. È necessario prenotare un biglietto per un viaggio aereo. È un'idea / concetto che tu "prenoti un biglietto". E non preoccuparti di come è fatto fisicamente.
Un Class
che lo implementa definirà come è fatto e quale forma fisica prende.
es. Un'interfaccia potrebbe essere quella di prenotare un biglietto. Potresti quindi avere varie entità che ti forniscono questo servizio. Un agente di viaggio, prenotazione online o ufficio della compagnia aerea reale.
Forniscono tutti il servizio ( Interface
) per prenotare un biglietto.
Leggi altre domande sui tag object-oriented interfaces