View Full Version : [Java]Abstract help
Ciao a tutti, c'è qualche duno che a la pazienza di spiegarmi velocemente come funziona una classe astratta... tipo:
Classe astratta Veicoli e classi moto auto che si estendono giusto??'
tipo che voglio avere una classe garage che mi fa vedere che auto ho che moto (tramite arraylist)?:help: Thx
Ciao a tutti, c'è qualche duno che a la pazienza di spiegarmi velocemente come funziona una classe astratta...Facciamo qualche premessa: la parola chiave 'abstract' può essere applicata alle classi e ai metodi di istanza.
Una classe può avere sia metodi astratti che non astratti ma se c'è almeno 1 metodo marcato abstract, allora anche la classe deve essere marcata abstract.
Una classe marcata abstract è una classe che non può essere istanziata e che deve essere estesa da una sottoclasse per poter essere usata. Una classe che estende una classe astratta può a sua volta essere astratta. L'importante è che la prima sotto-classe "concreta" (non astratta) implementi tutti i metodi astratti.
tipo:
Classe astratta Veicoli e classi moto auto che si estendono giusto??'
tipo che voglio avere una classe garage che mi fa vedere che auto ho che moto (tramite arraylist)?:help: ThxEcco un esempio che ho buttato giù (nota, per Java 5 o superiore):
import java.util.*;
public class Garage implements Iterable<Veicolo>
{
private ArrayList<Veicolo> veicoli;
public Garage ()
{
veicoli = new ArrayList<Veicolo> ();
}
public void add (Veicolo veicolo)
{
veicoli.add (veicolo);
}
public Iterator<Veicolo> iterator ()
{
return veicoli.iterator ();
}
public static void main (String[] args)
{
Garage g = new Garage ();
g.add (new Auto ("Toyota XYZ", false));
g.add (new Moto ("Yahama MNO", true));
g.add (new Auto ("Suzuki FGH", true));
for (Veicolo v: g)
{
System.out.println (v);
}
}
}
abstract class Veicolo
{
private String modello;
public Veicolo (String modello)
{
this.modello = modello;
}
public final String getModello ()
{
return modello;
}
public String toString ()
{
return modello;
}
}
class Auto extends Veicolo
{
private boolean trazioneIntegrale;
public Auto (String modello, boolean trazioneIntegrale)
{
super (modello);
this.trazioneIntegrale = trazioneIntegrale;
}
public boolean isTrazioneIntegrale ()
{
return trazioneIntegrale;
}
public String toString ()
{
return super.toString () + (trazioneIntegrale ? ", con trazione integrale" : "");
}
}
class Moto extends Veicolo
{
private boolean duePosti;
public Moto (String modello, boolean duePosti)
{
super (modello);
this.duePosti = duePosti;
}
public boolean isDuePosti ()
{
return duePosti;
}
public String toString ()
{
return super.toString () + (duePosti ? ", due posti" : "");
}
}
;) :D Thx ....
mi spieghi solo cosè quel
Iterable??? e xche metti quei caratteri "<" & ">"??
Iterable???Lo spiega bene qui: java.lang.Iterable (http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html).
"Implementing this interface allows an object to be the target of the "foreach" statement."
e xche metti quei caratteri "<" & ">"??Sono i "generics", vedi il tutorial (http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf).
e nn ho capito molto, nn c'è un modo senza usare iIterable e <> ?
poi ho una domanda...
la classe moto passa i dati a veicoli e alla fine abbiamo dei dati adesso in teoria dobbiamo mettere questi dati nel'arraylist ecco la domanda e questa: devo prima add in un oggetto giusto?
nel senso ho alla fine es 3 var "auto1 porche 22cavalli" devo unirle per metterle nel array list magazzinoGarage?
e nn ho capito molto, nn c'è un modo senza usare iIterable e <> ?I generics e il for-each sono caratteristiche introdotte con Java 5, se non vuoi/puoi usarle non ci sono grossi problemi!
Togliendo generics e for-each, la parte iniziale del mio esempio sarebbe:
import java.util.*;
public class Garage
{
private ArrayList veicoli;
public Garage ()
{
veicoli = new ArrayList ();
}
public void add (Veicolo veicolo)
{
veicoli.add (veicolo);
}
public Iterator iterator ()
{
return veicoli.iterator ();
}
public static void main (String[] args)
{
Garage g = new Garage ();
g.add (new Auto ("Toyota XYZ", false));
g.add (new Moto ("Yahama MNO", true));
g.add (new Auto ("Suzuki FGH", true));
for (Iterator i = g.iterator(); i.hasNext (); )
{
System.out.println (i.next ());
}
}
}Come vedi non cambia molto. Il metodo iterator() c'è comunque perché l'arraylist 'veicoli' è private, quindi devo avere un qualche modo per fare una scansione dell'arraylist. Il fatto è che senza il for-each è il programmatore che deve prendere l'iteratore e scansionarlo "a mano".
Se non si vuole nemmeno usare un iteratore, ci sarebbe la classica maniera del size() e get(index). Visto che 'veicoli' è private, metto nella classe Garage dei metodi size() e get() che chiamano gli omonimi metodi in ArrayList. A quel punto si fa il classico for da i=0 per i < size().
Comunque se hai tempo e voglia approfondisci i generics e il for-each, che sono molto comodi (Java 5 comunque ha portato anche molte altre novità!).
poi ho una domanda...
la classe moto passa i dati a veicoli e alla fine abbiamo dei dati adesso in teoria dobbiamo mettere questi dati nel'arraylist ecco la domanda e questa: devo prima add in un oggetto giusto?
nel senso ho alla fine es 3 var "auto1 porche 22cavalli" devo unirle per metterle nel array list magazzinoGarage?Non ho ben capito cosa non ti è chiaro. Nel mio esempio ho fatto:
g.add (new Auto ("Toyota XYZ", false));
Cioè ho creato un oggetto di tipo Auto e l'ho aggiunto al volo nell'ArrayList attraverso il metodo add (che richiama poi add in ArrayList).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.