|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
[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)? Thx
|
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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. Quote:
Codice:
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" : "");
}
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 07-03-2007 alle 08:20. |
||
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
mi spieghi solo cosè quel Iterable??? e xche metti quei caratteri "<" & ">"?? Ultima modifica di Pro7on : 07-03-2007 alle 07:45. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Lo spiega bene qui: java.lang.Iterable.
"Implementing this interface allows an object to be the target of the "foreach" statement." Sono i "generics", vedi il tutorial.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
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? |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Togliendo generics e for-each, la parte iniziale del mio esempio sarebbe: Codice:
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 ());
}
}
}
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à!). Quote:
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).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:25.










Thx










