PDA

View Full Version : [Java] classe astratta


bodomTerror
13-12-2006, 14:49
mi potete fare un esempio semplice di funzionamento di una classe astratta con altre classi normali..ke relazione cè e come viene sfruttata grz

andbin
13-12-2006, 16:36
mi potete fare un esempio semplice di funzionamento di una classe astratta con altre classi normali..ke relazione cè e come viene sfruttata grzInnanzitutto una classe astratta ha due caratteristiche fondamentali che sono le seguenti:
- non può essere istanziata
- deve essere estesa per poter essere sfruttata

Questo è in pratica l'opposto di una classe 'final' (che può essere istanziata ma non può essere estesa). E infatti non può essere sia abstract che final!

In una classe astratta ci possono essere metodi astratti e non astratti. La prima sotto-classe 'concreta' (non a sua volta astratta) dovrà quindi implementare tutti i metodi astratti.

kingv
13-12-2006, 20:38
andbin> nel tuo caso Solido avrebbe potuto (e anzi dovuto, visto che definisce solo il comportamento) essere un'interfaccia.

una classe astratta invece definisce la "forma" (tramite gli attributi) e il comportamento, decidendo di caso in caso se dei metodi fornire anche l'implementazione (dato che non necessariamente devono essere astratti) o meno.

bodomTerror
14-12-2006, 09:09
andbin quello ke devo fare io è più o meno l'esempio ke hai fatto tu: ho una classe astratta Forma ke usa la classe Canvas e ke ha la relazione di eredità con altre tre classi, cerchio, anello e poligono...

quello ke nn ho capito e se i metodi vanno tutti definiti in quella astratta? in modo ke le altre classi sfruttino quei metodi oppure dove e come devono essere definiti i metodi?;
poi un altra cosa ke riguarda i metodi draw ed erase ke servono per la canvas, devono essere definiti in ogni classe?

Ellipse2d.Double serve x creare rettangoli giusto? per creare invece dei cerchi cosa devo usare?

thebol
14-12-2006, 09:57
puoi fare in varie maniere...

puoi fare dei metodi implementati e final nella classe astratta, in modo che chi estenda la classe non possa modificare un determinato comportamento.

puoi fare dei metodi abstract protected, in modo da obbligare chi estende la classe a implementarli.

puoi fare dei metodi implementati e protected, in modo da dare un implementazione di default ma lasciare la possibilità a chi estende di cambiare certi comportamenti.


naturalmente lo puoi fare anche con metodi public.

ps.
un possibilie "pattern" è il seguente.
Fai un metodo public final implementato, che a sua volta chiama dei metodi protect e abstract.

In questa maniera imponi di poter cambiare solo certi comportamenti della classe.

bodomTerror
14-12-2006, 11:16
uhm..senza esempi nn capisco molto..