ahoj,
ako som vyššie napísal, definície konštánt mám v každej jednej konkrétnej (neabstraktnej) triede.
Teda napr. trieda Viper (to je jeden z typov stíhačiek) vyzerá takto:
public class Viper extends Fighter
{
static final int STANDART_HULL = 12; // toto sú konštanty s ktorými má pracovať
static final int MAX_HULL = 15; // setter a konštruktor (pokiaľ nemá hull zadaný ako
// argument)
String name;
public Viper()
{
this.setName("Viper");
this.setHull(STANDART_HULL);
}
public Viper(String name)
{
this.setName(name);
this.setHull(STANDART_HULL);
}
public Viper(String name, int hull)
{
this.setName(name);
setHull(hull);
}
}
Takto zatiaľ vlastne vyzerá každá konkrétna trieda, menia sa iba konštanty (malá stíhačka má menšie pancierovanie ako veľký krížnik).Tieto konštanty používam v Setteri, využívam enkapsuláciu aby som pri zmenení premennej hull mohol overiť či nepresahuje MAX_HULL, lebo malá stíhačka rady Viper nemôže mať väčší hull ako 15.
Setter mám ale definovaný v superclasse Spaceship, keďže ho majú mať všetky lode rovnaký.
Starship:
public abstract class Spaceship
{
protected int hull;
protected int MAX_HULL; // tieto tri premenné musia byť delkarované, inak setter v tejto
protected int STANDART_HULL; // triede veľmi protestoval :-) Sú teda nastavené na hodnotu 0.
public Spaceship()
{
}
public int getHull() {
return hull;
}
public void setHull(int hull) { // Toto je tá metóda, setter, ktorá nefunguje správne. Podtriedy
if (hull <= MAX_HULL) // ju dedia a na ich inštancie ju viem vyvolať, ale argument
this.hull = hull; // porovnáva a nastavuje s premennou MAX_HULL z tejto triedy, teda
else // s hodnotou 0, a to aj keď sú v podtriedach na ktoré ju volám
this.hull = MAX_HULL; // override-nuté.Táto metóda teda vždy v premennej podtriedy hull
} // nastaví hodnotu 0, nezávisle od toho, aký argument do nej vkladám.
........ // tu sú potom ešte všelijaké iné metódy, ktoré teraz netreba riešiť......
}
Tomu, že supertrieda nevidí premenné a konštanty svojich podtried rozumiem. Potreboval by som preto skôr nejaký návrh, ako tento problém vyriešiť s tým, aby bol kód čo najviac objektovo-orientovaný.(napísať getter a setter zvlášť pre každú podtriedu by bolo riešenie, ale neverím že neexistuje nič lepšie a elegantnejšie

Ďakujem pekne za rady!