/** Een organisatie is een algemene entiteit * uit het contactenbestand */ class Organisatie { /** Unieke identificatie van deze organisatie * in het contactenbestand. */ String nummer; /** Officiele benaming van de organisatie volgens * handelsregister, staatsblad enz. */ String naam; /** Construeer een organisatie met een nieuw * nummer en een gegeven naam. */ Organisatie(String nummer, String naam) { this.nummer = nummer; this.naam = naam; } /** Toon nummer en naam van de organisatie * achter elkaar op het scherm. */ public void printInfo() { System.out.println(nummer + "\t" + naam); } } /** Een school is een organisatie die opleidingen * van een welbepaald niveau organiseert. */ class School extends Organisatie { /** Omschrijving van het niveau van de opleidingen. */ String opleidingsniveau; /** Construeer een school met een nieuw organisatienummer * en een gegeven naam en opleidingsniveau. */ School(String nummer, String naam, String opleidingsniveau) { super(nummer, naam); this.opleidingsniveau = opleidingsniveau; } /** Toon nummer, naam en opleidingsniveau van de school * achter elkaar op het scherm. */ public void printInfo() { System.out.println( nummer + "\t" + naam + "\t" + opleidingsniveau); } } /** Deze klasse dient slechts om het gebruik en de * onderlinge relatie van de klassen Organisatie * en School te illustreren. */ class LijstVanOrganisaties { /** Druk een gegeven lijst van organisaties af * door van elke organisatie de eigen methode * printInfo() op te roepen. */ public static void printLijst(Organisatie[] org) { System.out.println( "nr\tnaam\topleidingsniveau (indien van toepassing)"); for (int i = 0; i < org.length; i++) { org[i].printInfo(); } } /** Illustreert het gedrag van moeder- en dochterklassen * waarin eenzelfde methode printInfo() voorkomt. * Eerst construeren we twee algemene organisaties * en twee scholen. De tweede school wordt echter * toegekend aan een veranderlijke van het type * Organisatie. Het blijkt dat de methode printInfo() * steeds de juiste informatie afdrukt die overeenkomt * met het echte objecttype, niet met het toevallige type * van de veranderlijke waarin dat object opgeslagen is. */ public static void main(String[] args) { Organisatie o1 = new Organisatie("1", "IBM"); Organisatie o2 = new Organisatie("2", "Apple"); School s3 = new School("3", "EHSAL", "hoger"); Organisatie o4 = new School("4", "St.-Jan", "secundair"); System.out.println( "We zullen de organisaties eerst 1 voor 1 afdrukken..."); o1.printInfo(); o2.printInfo(); s3.printInfo(); o4.printInfo(); System.out.println(); System.out.println("En nu tonen we de hele lijst..."); Organisatie[] lijst = new Organisatie[4]; lijst[0] = o1; lijst[1] = o2; lijst[2] = s3; lijst[3] = o4; printLijst(lijst); } }