Måske overvurderer du typecasting. Java konverterer i modsætning til C++ IKKE værdier for dig. Du bruger bare typecast til at love compileren, at du ved, hvad du gør.
Eksempel: class Bil {String passagerer;} class StorBil extends Bil {String baggage;} class NyBil {String passagerer;} public class Test { public static void main(String[] a) { Bil b1 = new Bil(); // Naturligvis OK Bil b2 = new StorBil(); // Også OK StorBil sb1 = (StorBil) b2; // Jeg lover compileren, at det er OK StorBil sb2 = (StorBil) b1; // Kørselsfejl! Det er løgn, at b1 indeholder en stor bil. } }
Hvis du virkelig har brug for at konvertere et objekt, skal du gøre det selv, fx. som disky skriver, med en getKasseKolonne metode.
To "ens" klasser er ikke ens i Java. En Bil er en Bil, og en StorBil er en Bil, og en Bil er muligvis en StorBil, men NyBil har INTET SOM HELST med Bil at gøre, og kan ikke konverteres automatisk.
Det er muligt at gøre det manuelt, og det er overskueligt at kopiere automatisk med reflection, da en lille rutine jo kan kopiere felter af samme navn automatisk.
disky: Hvis C++ ser en StorBil constructor, der tager Bil som eneste argument, så bruges den constructor ved typecast i det tilfælde, der ville give kørselsfejl i Java.
Det er en smagssag, men jeg foretrækker Javas mere puritanske stil, for jeg ved, at mange håbefulde C++-begyndere (også mig selv) har lavet det forfærdeligste rod, fordi vi ikke tænkte over konversioner.
Her skal jeg slet ikke sige noget om C++-humor angående implicitte og eksplicitte copy-constructors, der også altid slår til, når man mindst venter det. Java er dejligt!
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.