class Hovedprogram { public static void main(String[] args) { // Dette er kjent fra før: // Person p = new Person("Truls"); // Student s = new Student("Ole"); // Underviser u = new Underviser("Heidi"); // Masterstudent m = new Masterstudent("Knut"); // Dette er nytt: // Oppretter et array av typen Person. Person[] liste = new Person[4]; liste[0] = new Person("Truls"); liste[1] = new Student("Ole"); liste[2] = new Underviser("Heidi"); liste[3] = new Masterstudent("Knut"); // itererer gjennom hele listen. for (int i = 0; i < liste.length; i++){ // metoden hentNavn() finnes i Person-klassen. Alle subklasser av // Person arver derfor denne metoden. Den kan derfor også kalles // uten problemer for alle objektene. System.out.println(liste[i].hentNavn()); // Dette er pensum for uke 4. Kalles polymorfi. liste[i].gjorNoe(); // liste[i] er en referanse av typen Person, som riktignok // KAN peke på et Masterstudent-objekt. Vi må derfor sjekke // om liste[i] har Masterstudent-egenskaper ved å bruke // instanceof-operatoren. if (liste[i] instanceof Masterstudent){ // Hvis denne returnerer 'true' så er // vi sikre på at vi har et Masterstudent-objekt (eventuelt // en subklassen av Masterstudent). Vi kan da // caste denne Person-referansen til en Masterstudent-referanse. Masterstudent master = (Masterstudent) liste[i]; // NÅ har vi derfor tilgang på metoden skrik(). master.skrik(); } } // HUSK: en referanse / peker kan bare peke på objekter av samme type, // eller subklasser av denne typen. Altså bare bort og nedover, IKKE // oppover. Person pers = new Masterstudent("Ove"); Masterstudent mast = (Masterstudent) pers; // pers ser med Personbriller - mast ser med Masterstudent-briller. // de peker på akkurat samme objekt. // Dette er ikke lov: // Person pers2 = new Person("Henrik"); // Masterstudent mast2 = pers2; } }