Vererbungsprobleme

Status
Nicht offen für weitere Antworten.

Data

Mitglied
Hallo,

ich habe zwei Klassen Time und Event. Event is eine Subklasse von Time. Mein Problem ist, dass die Variablen in Time als private deklariert sind und ich in Event keinen Zugriff darauf habe. Habe versucht über get-Methoden dranzukommen, hat aber nicht funktioniert.

Die Time-Klasse wird problemlos kompiliert (obwohl ich auch hier nicht ganz sicher bin, ob meine equals-Methode so ganz astrein ist??), aber bei der Event-Klasse wirft der Compiler mit Fehlermeldungen nur so um sich. Wie komme ich an die Variablen?

Klasse Time:
Code:
public class Time implements Comparable {
    private int
      hour,          // 0 .. 23
      day,           // 1 .. 31
      month;         // 1 .. 12

    // allgemeiner Konstruktor
    // Falls die Wertebereiche für die Attribute nicht eingehalten werden,
    // wird eine IllegalArgumentException ausgeworfen.
    public Time(int hour, int day, int month) {
      if (hour > 23 || hour < 0 || day > 31 || day < 0 || month > 12 || month < 0)
        throw new IllegalArgumentException("ungültige Eingabe!");
      this.hour = hour;
      this.day = day;
      this.month = month;
    }
  

    // Standardkonstruktor
    // Datum und Uhrzeit werden auf den 01.01., 00:00 Uhr eingestellt
    public Time() {
      hour = 0;
      day = 1;
      month = 1;
    }

    // die Zeit einstellen
    // Falls die Wertebereiche für die Attribute nicht eingehalten werden,
    // wird eine IllegalArgumentException ausgeworfen.
    public void set(int hour, int day, int month) {
     if (hour > 23 || hour < 0 || day > 31 || day < 0 || month > 12 || month < 0)
       throw new IllegalArgumentException("ungültige Eingabe!");
    }

    // liefert eine Zeichenkette, welche die Attributwerte enthält
    public String toString() {
      return "Datum: " + day + "." + month + "." + "Stunde" + hour + ":00";
    }

    // zur Implementierung der Schnittstelle java.lang.Comparable
    // vergleicht das aktuelle Time-Objekt mit dem übergebenen Objekt o
    // liefert einen Wert < 0, wenn das aktuelle Objekt kleiner als t ist
    //                    > 0, wenn das aktuelle Objekt größer als t ist
    //                      0, wenn das aktuelle Objekt gleich t ist
    // Laufzeitfehler, falls o nicht vom Typ Time ist
    public int compareTo(Object o) {
      int month2 = ((Time)o).month;
      int day2 = ((Time)o).day;
      int hour2 = ((Time)o).hour;
      //Fall1
      if (month2 < month)
        return -1;
      //Fall2
      if (month2 > month)  
        return 1;   
      //Fall3
      if (month2 == month && day2 < day)
        return -1;
      //Fall4
      if (month2 == month && day2 > day)
        return 1;
      //Fall5
      if (month2 == month && day2 == day && hour2 < hour)
        return -1;
      //Fall6
      if (month2 == month && day2 == day && hour2 > hour)
        return 1;
      //Fall7
      return 0;
    }

    // vergleicht das aktuelle Time-Objekt mit dem übergebenen Objekt o
    // liefert true, wenn das aktuelle Time-Objekt gleich o ist, sonst false
    // Laufzeitfehler, falls o nicht vom Typ Time ist
    public boolean equals(Object o) {
      if (o == null)
        return false;
      if (this.month == ((Time)o).month && this.day == ((Time)o).day 
                                      && this.hour == ((Time)o).hour)
        return true;
      return true;
    }
}

Klasse Event:
Code:
class Event extends Time
{
    private String text;

    // allgemeiner Konstruktor
    public Event(int hour, int day, int month, String text) {
      super(hour, day, month);
      this.text = text;
    }

    // Standardkonstruktor
    public Event() {
      super();
    }

    // einen Termin festlegen
    public void set(int h, int d, int m, String s) {
    }

    // liefert eine Zeichenkette, welche die Attributwerte enthält
    public String toString() {
      return "Datum: " + day + "." + month + "." + "Stunde" + hour + 
                    ":00" + "Text: " + text;
    }

    // zwei Termine sind gleich, wenn sowohl Zeit als auch Text übereinstimmen
    // liefert true, wenn das aktuelle Event-Objekt gleich o ist, sonst false
    // Laufzeitfehler, falls o nicht vom Typ Event ist
    public boolean equals(Object o) {
      if (o == null)
        return false;
      if (this.month == ((Time)o).month && this.day == ((Time)o).day 
                                      && this.hour == ((Time)o).hour && this.text == ((Time)o).text)
        return true;
      return true;
    }
}
 

Leroy42

Top Contributor
Mit Getter-Methoden sollte es gehen. Bau doch EINE ein und poste die Fehlermeldung.

Ansonsten definierst du die Instanzvariablen einfach als protected.

Noch was:

In der Methode Event::equals() schreibst du
Code:
 this.text == ((Time)o).text)
hier mußt du
Code:
 text.equals((Time)o).text)
schreiben
 

Tobias

Top Contributor
Hallo Data,
die Aussage "klappt nicht" ist nicht hilfreich. Hier braucht es Quellcode und eine Fehlermeldung.

Ansonsten gibt es noch die Möglichkeit, die Variablen der Klase Time als protected zu deklarieren.

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben