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..