//HINT: Kan vaere lurt aa tegne klasehirarki tegning foor man begyner aa lose oppgaven class A {} class B extends A {} class C extends A {} class D extends C {} class TrueOrFalse { public static void main(String[] args) { A a = new A(); B b = new B(); C c = new C(); D d = new D(); A e = new D(); A f = new B(); //OPPGAVE 2 /* True fordi b er av klassen B som er en subklasse av A og instanceof sjekker om objektet er klassen den er eller superklasser av denne (og A er jo en superklasse for klassen B) */ System.out.println("a) " + (b instanceof A)); /* False fordi c er av klassen C og C er ikke en subklasse av D (men motsatt) og instanceof sjekker om objektet er klassen den er eller superklasser av denne (og D er jo en ingen superklasse for klassen C) */ System.out.println("b) " + (c instanceof D)); /* True fordi d er av klassen D som er en subklasse av A og instanceof sjekker om objektet er klassen den er eller superklasser av denne (og A er jo en superklasse for klassen D) */ System.out.println("c) " + (d instanceof A)); /* True fordi e er av klassen D som er en subklasse av C og instanceof sjekker om objektet er klassen den er eller superklasser av denne (og C er jo en superklasse for klassen D) */ System.out.println("d) " + (e instanceof C)); /* False fordi e er av klassen B og B er ikke en subklasse av C og instanceof sjekker om objektet er klassen den er eller superklasser av denne (og C er jo en ingen superklasse for klassen B) */ System.out.println("e) " + (f instanceof C)); //OPPGAVE 3 //Tilfelle 1 /* Vil kraesje siden a er et objekt av klassen A, som ikke er en subklasse av typen B. Det er derfor heller ikke lov til aa caste det til et objekt av den klassen */ B ab = (B) a; //Tilfelle 2 /* Vil ikke kraesje, klassen e er et objekt av klassen D som ikke er en subklasse av klassen B, men siden vi forst kjorer en test med bruk av instansceof, vil den bli False og vi vil aldri prove aa caste den. */ if( e instanceof B ){ B eb = (B) e; } //Tilfelle 3 /* Vil ikke kraesje, det er fordi e er et objekt av klassen D, og du har lov til aa caste noe til det et er */ D ed = (D) e; //Tilfelle 4 /* Vil ikke kraesje, det er fordi e er et objekt av klassen D, og du har lov til aa caste noe til det et er. instanceof sjekken ville ogsaa ha fanget opp om det skulle ha vaert noe (sagt med andre ord at e ikke er objekt av klassen D, eller en klasse som er en subklasse av klassen D) */ if( e instanceof D ){ D ed = (D) e; } //Tilfelle 5 /* Vil ikke kraesje, det er fordi f er et objekt av klassen B, og du har lov til aa caste noe til det et er */ B fb = (B) f; //Tilfelle 6 /* Vil ikke kraesje, det er fordi e er et objekt av klassen D som er en subklasse av klassen C og du har lov til aa caste et objekt til en av superklasse av objektet */ C ec = (C) e; } }