/** Algemeen element van het klantenbestand van de firma. * Dit is een abstracte klasse omdat elke klant ofwel een * IndividueleKlant (met familienaam, voornaam en aanschrijftitel) * ofwel een OrganisatieKlant (met firmanaam en rechtsvorm) is. */ abstract class Klant { /* dit voorbeeld van een abstracte klasse heeft geen eigen member-veranderlijken; in het algemeen kan een abstracte klasse willekeurig veel eigenschappen en methoden hebben, die dan allemaal door haar kinderen geerfd worden. We hadden bijvoorbeeld ook de eigenschappen "adres", "postgemeente", "telefoon" en "telefax" naar dit abstract niveau kunnen optillen, omdat ze gemeenschappelijk zijn voor individuele klanten en organisatieklanten. */ /** Druk een adresetiket af. */ public abstract void printAdres(); } /** Klant die een natuurlijke persoon is. */ class IndividueleKlant extends Klant { String familienaam, voornaam, titel, adres, postgemeente, land, telefoon, telefax; /** Druk een adresetiket af. */ public void printAdres() { // deze methode MOET geimplementeerd worden, // we zitten hier niet in een abstracte klasse System.out.println(titel + " " + voornaam + " " + familienaam); System.out.println(adres); System.out.println(postgemeente); System.out.println(land); } } /** Klant die een rechtspersoon is. */ class OrganisatieKlant extends Klant { String naam, rechtsvorm, adres, postgemeente, land, telefoon, telefax; /** Druk een adresetiket af. */ public void printAdres() { // deze methode MOET geimplementeerd worden, // we zitten hier niet in een abstracte klasse System.out.println(naam + " " + rechtsvorm); System.out.println(adres); System.out.println(postgemeente); System.out.println(land); } } /** Deze klasse dient slechts om het gebruik van * Klant, IndividueleKlant en OrganisatieKlant * te illustreren. */ class PrintKlantenLijst { /** Creeer een individuele klant en een bedrijfsklant. * Plaats ze na elkaar in een veranderlijke van het * abstracte type Klant en roep de methode * printAdres() op. */ public static void main(String[] args) { IndividueleKlant i = new IndividueleKlant(); i.familienaam = "Groening"; i.voornaam = "Matt"; i.titel = "Mr."; i.adres = "15, Main Street"; i.postgemeente = "Springfield 99999 SS"; i.land = "USA"; OrganisatieKlant o = new OrganisatieKlant(); o.naam = "EHSAL"; o.rechtsvorm = "v.z.w."; o.adres = "Stormstraat 2"; o.postgemeente = "B-1000 Brussel"; o.land = "Belgie"; Klant k; k = i; k.printAdres(); System.out.println(); k = o; k.printAdres(); } }