Posso considerare i metodi di interfaccia come metodi astratti?

14

Ci stavo pensando, e avevo dei dubbi.

Quando dichiaro un'interfaccia, ad esempio:

public interface MyInterface
{
   public void method1();
   public void method2();
}

Questi metodi di interfaccia potrebbero essere considerati astratti? Quello che voglio dire è che il concetto di un metodo astratto è:

An abstract method is a method that is declared, but contains no implementation.

Quindi, questi metodi potrebbero essere considerati astratti? Non sono metodi astratti "puri" perché non sto usando la parola abstract , ma concettualmente, sembra che lo siano.

Cosa puoi dirmi a riguardo?

Grazie.

    
posta rogcg 30.09.2011 - 13:23
fonte

5 risposte

14

Un'interfaccia è come una classe "puramente" astratta. La classe e tutti dei suoi metodi sono astratti. Una classe astratta può aver implementato metodi ma la classe stessa non può essere istanziata (utile per l'ereditarietà e il successivo utilizzo di DRY).

Per un'interfaccia, poiché non esiste alcuna implementazione, sono utili per il loro scopo: un contratto. Se implementi l'interfaccia, allora deve implementare i metodi nell'interfaccia.

Quindi la differenza è che una classe astratta può aver implementato metodi mentre un'interfaccia non può.

La ragione per cui sono separati è che una classe può implementare diverse interfacce. Java e C # limitano una classe inerente a una singola classe genitore. Alcuni linguaggi ti consentono di ereditare da più classi e puoi realizzare il lavoro di un'interfaccia tramite una classe "puramente" astratta. Ma l'ereditarietà multipla ha i suoi problemi, in particolare il temuto problema dei diamanti

    
risposta data 30.09.2011 - 15:24
fonte
10

Ho trovato una risposta utile qui: link

All of the methods in an interface are implicitly abstract, so the abstract modifier is not used with interface methods (it could be—it's just not necessary).

    
risposta data 30.09.2011 - 13:36
fonte
4

Le classi astratte possono avere metodi astratti.

Le interfacce possono solo avere metodi astratti.

method1() e method2() nell'esempio sono metodi astratti.

    
risposta data 21.08.2012 - 04:03
fonte
-1

La differenza qui è che le classi astratte possono contenere dettagli di implementazione, sebbene non possano essere istanziate da sole. Mentre un'interfaccia è semplicemente un modello per una classe

    
risposta data 30.09.2011 - 13:34
fonte
-3

Le classi di interfaccia non hanno metodi astratti. Non hanno alcun metodo. Hanno solo una lista di metodi che un'altra classe dovrebbe implementare per essere in grado di conformarsi all'interfaccia. Nel tuo esempio, non esiste un metodo method1 e nessun metodo method2 finché qualcuno non aggiunge questi metodi a una classe.

    
risposta data 12.01.2017 - 14:23
fonte

Leggi altre domande sui tag