24. juli 2003 - 13:00Der er
18 kommentarer og 1 løsning
Nedarvning i Java
Jeg kan ikke finde fejlen her...jeg får en "cannot resolve Symbol" på Square firkant = new Square(100); ^ Begge filer ligger i samme package, og der plejer ikke at være noget galt med dét.
public class Rectangle { protected double length; protected double width;
Det er muligt at jeg ikke ved nok om Java, men så vidt jeg ved, så skal den nedarvede klasse Square stå uden for definitionen af Rectangle. Har du prøvet det?
Hvis Square er erklæret inde i Rectangle, så kan man få adgang til Square ved Rectangle.Square Når Square så nedarver fra Rectangle giver følgende så mening? Rectangle.Square.Square ...eller: Rectangle.Square.Square.Square.Square.Square
Vær iøvrigt lidt forsigtig med problem-stillingen Rectangle<->Square og arv.
Det er ikke det bedste eksempel til arv.
Det er OK så længe du der ikke er metoder til at ændre dimensionerne.
Men hvis du tilføjer sådanne metoder er der problemer.
(da C.J.Date som var med til at opfinde relations databaser for 30 år siden skulle argumentere for at verden ikke er objekt orieneteret valgte han lige præcis dette eksempel)
Ok, det var bedst at lægge Square over i sin egen klasse. Jeg fik enelleranden underlig fejl, jeg ikke kan genskabe (og jeg har vist heller ikke lyst), da jeg brugte Rectangle.Square etc.
Tak for hjælpen, og (som sædvanligt :o) tak for jeres opklarende kommentarer...det er noget bedre end dé medkommentatorer, der bare lægger det rigtige kodeeksempel ind.
Kors, hvor er jeg træt af bøger med forkerte kodeeksempler!
Ok - det er altså et spørgsmål om overskuelighed for brugerne af den samling klasser man skriver. Jeg vil dog mene at man overskuelighed og forståelse lige så nemt kan opnås ved at undgå at bruge for mange ukendte finesser i et sprog! Måske er det bare mig der endnu ikke kender Java godt nok ;-)
Jeg checkede lige og den syntax jeg angav for inner class var faktisk ikke helt rigtig, da new på sådan en kræver en instans.
Følgende eksempel compiler og kører:
public class X { private int xv; public X() { xv = 123; } public void print() { System.out.println(xv); } public class Y { private int vy; public Y() { vy = xv + 1; } public void print() { System.out.println(vy); }
} public static void main(String[] args) { X x = new X(); x.print(); X.Y xy = x.new Y(); xy.print(); } }
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.