|
|
|
![]() |
|
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)? ![]() |
![]() |
![]() |
![]() |
#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: 04:36.