Lite funderingar samt en konkret - abstrakt klass java

Permalänk
Medlem

Lite funderingar samt en konkret - abstrakt klass java

Tjena där!

Sitter och natthackar lite för att fräscha upp java-kunskaperna men har fastnat lite när det gäller vad man kan och inte kan göra med en abstrakt klass i java.

Jag vill skapa en abstrakt klass. Under denna klass skall det finnas flera subklasser som kommer att ha flera funktioner med samma namn, men olika logik/kod. Den delen är jag helt med på, men jag vill också ha variabler med olika värden beroende på vilken sub-klass som kompletterar den abstrakta super-klassen i konstruktorn.

Går det att ha dessa variabler i den abstrakta super-klassen eller är det en dum idé?

Tack på förhand

EDIT: Hm, kom på mig lite nu tror jag. Det jag efterfrågar ska väl inte vara svårare än att jag gör dessa variabler som protected?

Visa signatur

-= Svettig dator och en hårig mobiltelefon =-

Permalänk
Medlem

Ja, vad skulle annars variabler i en abstrakt klass vara till för? Se bara till att variablerna liksom är relevanta för alla tänkbara underklasser.

Permalänk
Medlem

Jadu, tanken är inte alltid den starka sidan om nätterna när inspirationen tittar fram

Visa signatur

-= Svettig dator och en hårig mobiltelefon =-

Permalänk
Medlem

ja, alltså du är på rätt väg.

Om jag förstod din fråga rätt, så ska du inte placera variablerna som dina underklasser ska ha i superklassen. Detta motverkar ju syftet med att ha en abstrakt klass. Dessa variabler ska placeras i den klass som ärver från superklassen. Och ja, variablerna i superklassen ska vara protected (eller inte private iaf..). Det åstadkommer du genom att inte skriva något framför eller helt enkelt skriva protected. Dessutom kan din ärvande klass också vara abstrakt, så att du får ytterligare ett abstraktionslager. Ett (dåligt och ogenomtänkt, men ändå förklarande tror jag) exempel:

abstract class Animal { int weight; //denna blir protected om jag inte minns fel (eftersom jag inte sagt ngt annat) String name; abstract void makeSound(); }

abstract class Bird extends Animal { double maximumFlightDistance; void fly(int x, int y) { if(canFlyDistance(sqrt(x^2+y^2)) { System.out.println("flyger till koordinaten (" + x + ", " + y + )"); } } private bool canFlyDistance(double distance) { return distance <= maximumFlightDistance; } }

public Blåfink extends Bird { public Blåfink() { this.name = "blåfink"; this.maximumFlightDistance = 10000; } public Blåfink(int maximumFlightDistance) { this.name = "blåfink"; this.maximumFlightDistance = maximumFlightDistance; } void makeSound() { System.out.println("jag är en " + name + " som kan flyga " + maximumFlightDistance + " km."); } }

Jag reserverar mig för logikfel och fel i koden, eftersom jag inte lagt ner allt för mkt tid på att fundera ut detta och jag har inte kontrollerat om koden kompilerar..

Visa signatur

Stationär: Gigabyte DS3 | E6600 @ 3.2Ghz | BFG 8800GTS @ 610/1020 | 2GB DDR2 6400 | 400GB SATA2
HTPC: ABIT F-I90HD | E4500 | ASUS HD2400PRO | 2GB DDR2 6400 | 500GB SATA2
signature your as this use backwards this read to enough dumb were you if