Domanda

È necessario che una classe astratta abbia almeno un metodo astratto?

È stato utile?

Soluzione

L'argomento di questo post e il corpo pongono due domande diverse:

  1. Dovrebbe avere almeno un membro astratto?
  2. È necessario avere almeno un membro astratto?

La risposta al n. 2 è definitivamente no.

La risposta al n. 1 è soggettiva e una questione di stile. Personalmente direi di sì. Se il tuo intento è impedire l'istanza di una classe (senza metodi astratti), il modo migliore per gestirlo è con un privateprotected costruttore, non contrassegnandolo abstract.

Altri suggerimenti

No, non è necessario. Lo vedi spesso di nuovo "Metodo del modello" Modello di design, come HttpServlet, in cui ogni metodo ha già un comportamento predefinito definito e sei libero di scavalcare solo uno (o più) di loro invece di tutto di loro.

In JDK 1.0 era davvero necessario disporre di almeno un metodo astratto in una classe astratta. Questa restrizione è stata rimossa in JDK 1.1 (1997? (Sono vecchio)) e tali classi aggiunte alla Biblioteca Java, come java.awt.event.KeyAdapter.

In C ++ è necessario almeno una funzione virtuale pura per rendere necessaria una sottoclasse e almeno una funzione virtuale per aggiungere Rtti alla classe. In genere ha senso usare il distruttore.

Nota quando si sfugge ai metodi di non astratto, utilizzando @Override è una buona idea. Non solo indica al lettore informazioni importanti su ciò che il codice sta tentando di fare, ma individua anche errori comuni in cui tipografi o tipi di parametri errati impediscono la sovraccarico.

No: puoi dichiarare un astratto di classe senza avere metodi astratti. Potrebbe non avere alcun senso concettualmente che esistasse un'istanza di quella classe, o potresti voler garantire che solo le sottoclassi di quella classe possano essere istanziate (per qualsiasi motivo)

Se una classe ha un abstract Modificatore nella sua dichiarazione diventa abstract classe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top