Ik heb een denk ik simpele vraag over inheritance in java waar ik niet echt aan uit raak.
Ter illustratie hebben we een klasse meubel en een klasse kast die er als volgt uitzien:
Klasse Meubel:
Klasse kast:
Wanneer we nu een array maken van meubels en we plaatsen er een kast in kan ik wel een meubel plaatsen maar deze niet opendoen.
Een kast is ook een meubel, dus die zou zoals hierboven ook gedaan wordt probleemloos in de meubel array moeten werken. Waarom kan ik dan de methode open niet uitvoeren. Het object waarop ik het wil uitvoeren is immers een kast.
Het enige wat ik op dit moment kan bedenken is dat je met een array van meubelen zit en dan ook beperkt bent tot de methoden in die klasse, maar dat geeft nog altijd niet aan waarom dat zo is.
Ter illustratie hebben we een klasse meubel en een klasse kast die er als volgt uitzien:
Klasse Meubel:
Java:
1
2
3
4
5
6
| public class Meubel { public void plaats() { System.out.println("meubel geplaatst"); } } |
Klasse kast:
Java:
1
2
3
4
5
6
7
8
9
10
11
| public class Kast extends Meubel { @Override public void plaats() { System.out.println("kast geplaatst"); } public void open() { System.out.println("kast geopend"); } } |
Wanneer we nu een array maken van meubels en we plaatsen er een kast in kan ik wel een meubel plaatsen maar deze niet opendoen.
Java:
1
2
3
4
5
6
7
8
9
10
11
| Meubel[] woonkamer = new Meubel[10]; Meubel[4] = new Meubel(); Meubel[5] = new Kast(); Meubel[4].plaats(); // Output --> meubel geplaatst Meubel[5].plaats(); // Output --> kast geplaatst Meubel[5].open(); // Wil niet compilen Kast kast = new kast(); kast.open(); // Output --> kast geopend |
Een kast is ook een meubel, dus die zou zoals hierboven ook gedaan wordt probleemloos in de meubel array moeten werken. Waarom kan ik dan de methode open niet uitvoeren. Het object waarop ik het wil uitvoeren is immers een kast.
Het enige wat ik op dit moment kan bedenken is dat je met een array van meubelen zit en dan ook beperkt bent tot de methoden in die klasse, maar dat geeft nog altijd niet aan waarom dat zo is.