1 svar
377 visningar
TB16 behöver inte mer hjälp
TB16 182 – Fd. Medlem
Postad: 14 aug 2018 15:03 Redigerad: 14 aug 2018 15:32

Arv och polymorphism

Uppgift:

Givet följande klasser:

public class C {

public void f() { h(); }

public void g() { System.out.println("C.g"); }

public void h() { System.out.println("C.h"); }

}


public class B extends C {

public void f(int x) { g(); }

public void g() { System.out.println("B.g"); }

public void h(int x) { System.out.println("B.h"); }

}


public class A extends B {

public void f(char x) { System.out.println("A.f"); }

public void g() { System.out.println("A.g"); }

public void h() { System.out.println("A.h"); }

}


Vad skrivs ut om följande exekveras?

B a = new A();

a.f(42);

C b = new B();

b.f();


a. Först B.g, sen C.h

b. Först A.g, sen C.h

c. Först A.g, sen B.h

d. Först B.g, sen A.h

Uppgiften är från en gammal tenta och det saknas svar på den så jag vänder mig till er för att dela med mig av mina tankar och kanske få lite feedback om det är något som jag har fått om bakfoten. Jag antar att uppgiften syfte är att testa ens kunskaper inom arv och polymorphism.

Mina tankar:

B a = new A();

Referensvariabeln a av typen B pekar på ett objekt av typen A

a.f(42);

a "försöker" anropa f i klass A, men eftersom att A ej har skrivit över denna metod så kommer anrop av f i superklassen till A (klass B) att anropas istället? Metod f anropar i sin tur metod g i klass A eftersom att A har skrivit över metoden den ärver av B, och vi får således utskriften A.g

C b = new B();

Referensvariabeln b av typen C pekar på ett objekt av typen B

b.f();

b "försöker" anropar f i klass B, men eftersom att B ej har skrivit över denna metod så kommer anrop av metoden f i superklassen till B (klass C) att anropas istället? Metod f anropar i sin tur metod g i klass C eftersom att B inte har skrivit över metoden den ärver av C, och vi får således utskriften C.h

Jag har provkört koden och påstående b är rätt svar.


Flezer 25 – Fd. Medlem
Postad: 26 okt 2018 20:59

Jag tycker det ser ut som du förstått hur det funkar mycket bra, gäller bara att hålla tungan rätt i munnen och gå igenom det metodiskt som du gjort

Svara
Close