Hey,
Ik ben bezig dit boek te lezen: http://www.headfirstlabs.com/books/hfooad/
Op een gegeven moment wordt er gebruik gemaakt van polymorfisme op een manier die ik niet snap. Dit is de code, iets simpeler gemaakt:
inventory.java
instrument.java
Dan heb je nog een class Guitar die overerft van Instrument.
Nu is de Instrument class dus abstract zodat je geen objecten hiervan kunt aanmaken, maar enkel van de subclasses van Instrument (zoals Guitar).
Dit stuk code snap ik echter niet:
Hier wordt het object gecast naar een Instrument en zo returned. Maar hoe is dit mogelijk? Instrument is abstract, hoe komt het dat je er dan naar kunt casten? Nu bevat de instrument reference (variabele) een Instrument object, terwijl dit niet mogelijk zou mogen zijn.
De code werkt gewoon, dus is er iets wat ik niet goed snap. Hoe komt het dat dit mogelijk is?
Bedankt
Ik ben bezig dit boek te lezen: http://www.headfirstlabs.com/books/hfooad/
Op een gegeven moment wordt er gebruik gemaakt van polymorfisme op een manier die ik niet snap. Dit is de code, iets simpeler gemaakt:
inventory.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public class Inventory { private List inventory; public Inventory() { inventory = new LinkedList(); } public void addInstrument() { Instrument instrument = new Guitar(); inventory.add(instrument); } public Instrument get() { for (Iterator i = inventory.iterator(); i.hasNext(); ) { Instrument instrument = (Instrument)i.next(); // code even wat simpeler gemaakt hier. Niet echt logische code nu, maar dat maakt niet uit =P return instrument; } } |
instrument.java
Java:
1
2
3
4
5
6
7
8
9
10
| public abstract class Instrument { private double price; public Instrument() { price = 5.0; } } |
Dan heb je nog een class Guitar die overerft van Instrument.
Nu is de Instrument class dus abstract zodat je geen objecten hiervan kunt aanmaken, maar enkel van de subclasses van Instrument (zoals Guitar).
Dit stuk code snap ik echter niet:
Java:
1
2
3
4
5
6
7
| public Instrument get() { for (Iterator i = inventory.iterator(); i.hasNext(); ) { Instrument instrument = (Instrument)i.next(); // deze regel snap ik niet return instrument; } |
Hier wordt het object gecast naar een Instrument en zo returned. Maar hoe is dit mogelijk? Instrument is abstract, hoe komt het dat je er dan naar kunt casten? Nu bevat de instrument reference (variabele) een Instrument object, terwijl dit niet mogelijk zou mogen zijn.
De code werkt gewoon, dus is er iets wat ik niet goed snap. Hoe komt het dat dit mogelijk is?
Bedankt