Rudolf: Problem mit Klassen

Hallo zusammen!

Problem: Man darf NUR in einer abgeleitete Klasse auf die Methoden einer SuperKlasse zugreifen.

Zum Beispiel:

#######################################################

class SuperKlasse {
private string name;

public string getName() {
     return this.name;
  }
}

#######################################################

class AbgeleiteteKlasse extends SuperKlasse {
  public SuperKlasse newSuperKlasse() {
    return new SuperKlasse();
  }

public string getNameSupKlasse(SuperKlasse objekt)
  {
    return objekt.GetName(); //GetName() MUSS hier zur Verfügung stehen
  }
}

#######################################################

//Das DARF NICHT möglich sein:

class IrgendeineKlasse {
  public string methode(){
     abgKlasse = new AbgeleiteteKlasse()
     supKlasse = abgKlasse.newSuperKlasse();
     return supKlasse.GetName(); //GetName() DARF in dieser Klasse NICHT zur Verfügung stehen
  }
}

#######################################################

=> Wie löst man dieses Problem?

Viele Grüsse Rudolf

  1. Hallo Rudolf,

    Wenn ich Dich richtig verstanden habe, willst Du, dass bestimmte Methoden nicht öffentlich sind aber trozdem von abgeleiteten Klassen verwendet werden können.
    Das kannst Du mit dem Schlüsselwort "protected" erreichen.
    Klassen, die im selben Paket liegen, können diese Methoden allerdigs auch verwenden.

    Grüße

    Daniel

    1. Ich habs schon mit Protected versucht. Aber in einer x-beliebigen Klasse kann ich die Methoden dieses Objekts trotzdem anwenden. Ich möchte dass das Objekt ausserhalb seiner Klasse nur wie ein abgeschlossenes Objekt hin und hergeschoben werden kann und keine Methoden zur Verfügung stehen...

  2. Hi,

    Daniel hat _die_ Lösung genannt. "protected" Member können nur von abgeleiteten Klassen oder solchen aus dem _selben_ Package aufgerufen/überschrieben werden.

    Abgesehen davon: Bist Du sicher, den Begriff "Vererbung" und seine Anwendung wirklich verstanden zu haben (warum z.B. sollte eine Methoe in einer Subklasse eine Instanz seiner Superklasse zurückgeben..)?

    Viele Grüße,
    Martin Jung