Du skal tænke på, at instansen, du arbejder med (this) stadigvæk er af klassen B - at den så bruger metoder fra superklasser ændrer ikke ved det faktum...
Jeg har ikke testet det, men hvis du insisterer på at få this=dk.test.print.A som udskrift i A::aMethod, så gør følgende (bemærk dog at det er et hack, som ikke ligger i tråd med oo-principper)
public void aMethod() { System.out.println("This =" +(A)this.getClass().getName()); }
BEMÆRK : Det er ikke testet - men idéen er at caste this (vilkårlig instans) om til et A-objekt, inden getClass() kaldes...
Ahhh... Så er eksperten oppe igen ! -----------------------------------
Jeg mener ikke at forslag hvor "super" inarbejdes vil virke særligt godt som f.eks. dsj foreslår
Prøv at bemærk følgende : System.out.println("This = " + super.getClass().getName());
"This =" må vel hentyde til den pågældende instans (dvs. en B instans)
når man så skriver B = super.getClass(), så vil jeg betragte det som forkert...
Hele situationen forekommer mig at være grebet helt forkert an... Det handler jo ikke om at der, for alt i verden, skal skrives This = A ... Derimod må det vel handle om at få en indikation om, hvilken klasse, den kode, som udføres, kommer fra...
Derfor burde det også være A som indikerer, at det er A som bruges -- og ikke B
Derudover vil dsj's kode også gå imod gode DP(Design Patterns)-praksis... Et af mantraene i OO er nemlig Lav kobling... Her er det nemlig B som "gør rede" for A's tilstand - og ikke A selv... (derfor skabes en unødig høj afhængighed mellem A og B)...
Derfor vil jeg støtte soelvpil's kode #1 -- hvor A gøres ansvarlig for at gøre rede for sin egen tilstand...
Det tredje foreslag bryder jeg mig dog ikke om, da det tvinger _alle_ subklasser af A til at lave en egen implementation af getClass() -- Igen skabes en unødig afhængighed :-)
Hmm - jeg håber ikke at det forrige lyder lidt "afstumpet" --- Problemet var bare, at eksperten var gået ned, da jeg svarede omkring 17:35 --- Og derfor blev mine ideer og betragninger "tabt i cyberspace"... Jeg har forsøgt at skrive, hvad mine betragtninger var, men når man bliver nød til at skrive sådan noget 2. gang, så bliver det _altid_ en vag kopi af det første...
Hva så, lukker du spørgsmålet, eller skal vi skrive mere først???
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.