Kapselung override Setter

der_roemer

Mitglied
Halli hallo,

ich wurschtel mich gerade durch die Grundlagen von Vererbung und Kapselung.
Nun habe ich hier ein paar Klassen, welche vererbt werden:

Tier --> HundeArtigesTier --> Wolf, Hund
Tier --> KatzenArtigesTier --> Löwe, Hauskatze

Ich hab unter Tier das Gewicht deklariert, PRIVATE,
dazu hab ich einen Setter angelegt, PUBLIC,
der ein Gewicht zwischen 1 und 500 kg zulässt.

Java:
public class Tier {
    private int _gewicht;
    private int _groesse;
    
    public void setGewicht(int gewicht) {
        if (gewicht < 500 & gewicht > 1) {
            _gewicht = gewicht;    
        } else {
               System.out.println("Mit dem Gewicht des Tieres stimmt was nicht, sie wiegt "+ gewicht + " kg ???");
        }
        
    }
    
    public int getGewicht() {
        if (_gewicht > 0) {
            return _gewicht;    
        } else {
            System.out.println("Fehler beim Auslesen des Gewichtes");
            return 0;
        }
    }

Jetzt will ich den Setter in "Hauskatze" überschreiben,
weil eine solche sicher nicht 500 kg wiegen wird.
das Problem ist, ich komm nicht mehr an das PRIVATE aus Tier ran:

Java:
    @Override
    public void setGewicht(int gewicht) {
        // Setter für das Gewicht der Katze überschreiben
        if (gewicht < 15 & gewicht > 1) {
            _gewicht = gewicht;    
        } else {
            System.out.println("Mit dem Gewicht der Katze stimmt was nicht, sie wiegt "+ gewicht + " kg ???");
        }
        
    }

Was kann ich tun?

Vielen Dank schon mal :)


P.S.: ich hab schon reichlich gesucht aber nichts zum Thema gefunden,
hab ich den falschen Suchbegriff benutzt?
 

faetzminator

Gesperrter Benutzer
Ein Ansatz könnte sein, in [c]Tier[/c] ein [c]minGewicht[/c] und [c]maxGewicht[/c] zu implementieren. Etwa so:

Java:
public abstract class Tier {

    private final int minGewicht;
    private final int maxGewicht;
    private int gewicht;

    public Tier(int minGewicht, int maxGewicht) {
        this.minGewicht = minGewicht;
        this.maxGewicht = maxGewicht;
    }
    
    public void setGewicht(int gewicht) {
        if (gewicht < minGewicht || gewicht > maxGewicht) {
            throw new IllegalArgumentException("Das Gewicht " + gewicht + " liegt ausserhalb der Gewichtsgrenzen");
        }
        this.gewicht = gewicht;
    }
}

Java:
public class Hauskatze extends Tier {

    public Hauskatze() {
        super(1, 10);
    }
}

1. nenn die Variablen nicht _xy
2. Verwende kein sysout sondern werfe eine Exception
3. ich würd [c]Tier[/c] abstrakt machen
 

der_roemer

Mitglied
Hallo faetzminator,

Danke für die Antwort.

Ja mit Konstruktoren geht das wohl,
hab mich da erst einarbeiten müssen, kannte ich noch nicht.

Aber warum soll ich da eine Exception werfen?

Java:
throw new IllegalArgumentException("Das Gewicht " + gewicht + " liegt ausserhalb der Gewichtsgrenzen");

Dann bricht ja mein Programm ab, sofern da ein Wert
ausserhalb der Grenzen eingegeben wird.
Der Sinn erschließt sich mir nicht...


Gruß roman.


P.S.:

die Notation mit dem Unterstrich "int _xy" z.B.
hatte ich mir überlegt für private Variablen,
hatte das mal irgendwo gehört,
aber das galt nur für lokale in Methoden,
weiß nicht mehr genau...
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Höm... einfach super?
Java:
    @Override
    public void setGewicht(int gewicht) {
        // Setter für das Gewicht der Katze überschreiben
        if (gewicht < 15 & gewicht > 1) {
            super.setGewicht(gewicht); <------------------------- Da?!
        } else {
            System.out.println("Mit dem Gewicht der Katze stimmt was nicht, sie wiegt "+ gewicht + " kg ???");
        }
        
    }
!?
 

faetzminator

Gesperrter Benutzer
Aber warum soll ich da eine Exception werfen?

Java:
throw new IllegalArgumentException("Das Gewicht " + gewicht + " liegt ausserhalb der Gewichtsgrenzen");

Dann bricht ja mein Programm ab, sofern da ein Wert
ausserhalb der Grenzen eingegeben wird.

Natürlich. 2 Möglichkeiten:
  • Es wurde durch einen Programmierfehler verursacht. Werfe diese IllegalArgumentException.
  • Es wurde durch eine Fehleingabe vom User verursacht. Da hast du mehrere Möglichkeiten
    • Du machst davor eine Validierung
    • Du wirfst nicht eine RuntimeException (was IllegalArgumentException ist), sondern eine Checked Exception, welche man bearbeiten/weiterwerfen muss
    • Du wirfst eine RuntimeException aber hast irgendwo im Programmfluss eine Fehlerverarbeitung, welche dem User (auf diese IllegalArgumentException) irgendwas sinnvolles ausgibt
 

der_roemer

Mitglied
@Marco13:
Das sieht echt gut aus :)
Ja da fehlt mir die Erfahrung,
hatte mich schon gefragt, wie ich eine katzentypische Meldung werfe;
einfach genauso wie beim Konstruktor mit super... durchreichen

@faetzminator:
das muss ich mir mal in Ruhe anschauen,
Danke für die Anregung!



Ich geh aber ins Bett erstmal

Schöne Nacht noch!

roman.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Was bedeutet das @Override? Java Basics - Anfänger-Themen 1
M Override zeigt keinen Effekt Java Basics - Anfänger-Themen 9
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Warum @Override? Java Basics - Anfänger-Themen 2
S Compiler-Fehler not abstract and does not override Java Basics - Anfänger-Themen 9
M abstract method does not override or implement.... Java Basics - Anfänger-Themen 7
M @override Java Basics - Anfänger-Themen 15
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
T Override klappt nochmal wie? Java Basics - Anfänger-Themen 3
B Annotation : @Override Java Basics - Anfänger-Themen 9
K Interface implementieren @Override Java Basics - Anfänger-Themen 8
U override Problem mit exception Java Basics - Anfänger-Themen 5
G Anfängerfrage zu "@Override" Java Basics - Anfänger-Themen 5
S @ override + noch was Java Basics - Anfänger-Themen 3
G JDialog + p aintComponent-Override Java Basics - Anfänger-Themen 3
R Fehler: "Class XY ist not abstact and does not override Java Basics - Anfänger-Themen 3
B Eclipse 3.2 + @override Java Basics - Anfänger-Themen 3
K Override in Interfaces Java Basics - Anfänger-Themen 11
K <class> is not abstract and does not override abstract Java Basics - Anfänger-Themen 5
I If / Else in Setter? Java Basics - Anfänger-Themen 8
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
W Getter/Setter Java Basics - Anfänger-Themen 4
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
V getter/setter Garage Java Basics - Anfänger-Themen 12
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
JavaTalksToMe Kapselung Setter Frage Java Basics - Anfänger-Themen 15
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
K Kapselung getter & setter Java Basics - Anfänger-Themen 11
F Setter Java Basics - Anfänger-Themen 4
gamebreiti Problem mit Setter in Superklasse Verkettung der Kostruktoren??? Java Basics - Anfänger-Themen 7
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Setter funktioniert nicht Java Basics - Anfänger-Themen 6
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
M Methoden Problem bei Setter. Java Basics - Anfänger-Themen 2
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
S setter Java Basics - Anfänger-Themen 9
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
S Ein Attribut/Instanz eines bestehendes Objektes mit SETTER Methode ändern Java Basics - Anfänger-Themen 3
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
S Setter Methode von Boolean Java Basics - Anfänger-Themen 11
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
propra Gegenteil von Setter-Methoden Java Basics - Anfänger-Themen 30
T Setter Methode Wertebereich eingrenzen Java Basics - Anfänger-Themen 5
F Setter-Methode bei double-Array Java Basics - Anfänger-Themen 6
A Setter verschachteln? Java Basics - Anfänger-Themen 4
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
T Variablen fast identische Setter Java Basics - Anfänger-Themen 14
H OOP Setter im Konstruktor um code nicht zu wiederholen? Java Basics - Anfänger-Themen 2
N OOP Getter, Setter und andere Probleme Java Basics - Anfänger-Themen 8
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
N immer Setter-Methoden verwenden? Java Basics - Anfänger-Themen 54
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
U Problem mit setter Java Basics - Anfänger-Themen 17
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
S Setter bei Variablen Java Basics - Anfänger-Themen 6
R Enum und dann setter Setzen? Java Basics - Anfänger-Themen 44
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Getter/Setter Java Basics - Anfänger-Themen 61
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
G [Hibernate] Could not find a setter for property Java Basics - Anfänger-Themen 2
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben