Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Java Klassenableitungen





Frage

Hallo ! Bin im Moment im Rahmen einer EDV-Weiterbildung Java am lernen. Ich stehe bei einer Aufgabe ein wenig auf dem Schlauch: Aus einer Klasse Kreis soll eine Klasse Ellipse abgeleitet werden. Hierzu sollen jeweis Methoden zum Aufruf der Berechnung der Fläche (1 x vom Kreis, 1 x von der Ellipse) geschrieben werden. Das erstellen bzw. ableiten der Klassen hat auch ganz gut funktioniert, leider bekomme ich jedoch beim Aufruf der Methode zur Berechnung der Fläche Ellipse immer das Ergebnis für die Flächenberechnung des Kreises angezeigt. Wer kann mir sagen, wo der Fehler liegt ? (Die Variablen \"x\" und \"y\" sollen lediglich Koordinaten in einem Koordinatensystem darstellen und sind von der Berechnung nicht betroffen, Variable \"r\" steht für den Radius): Klasse Kreis: ********** public class Kreis { public double r; private int x; private int y; public Kreis (double r, int x, int y){ this.r = r; this.x = x; this.y = y; } private double flaeche () { double ergebnis; ergebnis = r * r * 3.141592653589793; return ergebnis; } } abgeleitete Klasse Ellipse: ********************* public class Ellipse extends Kreis { public double r1; public Ellipse (double r, double r1, int x, int y){ super (r, x, y); this.r1 = r1; } private double flaeche (double r, double r1) { double ergebnis; ergebnis = r * r1 * 3.141592653589793; return ergebnis; } } Aufruf der Methode zur Kreisflächenberechnung: ************************************** public class Aufruf extends Object { public static void main (String args[]) { Kreis k = new Kreis(10, 10, 10); double flaeche=k.flaeche(); System.out.println(\"Kreisflaeche = \"+flaeche); } } Aufruf der Methode zur Ellipsenflächenberechnung: ********************** public class Aufrufell extends Object { public static void main (String args[]) { Ellipse e = new Ellipse (30, 20, 20, 20); double flaeche=e.flaeche(); System.out.println(\"Ellipsenflaeche = \"+flaeche); } } Würde mich freuen, wenn mir jemand einen Tipp zur Lösung des Problem(chen)s geben könnte könnte. Gruß Thomas

Antwort 1 von semi

Du hast die Methode
private double flaeche()
der Klasse Kreis NICHT überschrieben sondern eine NEUE Methode implementiert, die eine andere Signatur hat.
private double flaeche(double r, double r1)
Im Klartext bedeutet es, dass die Klasse Kreis, wie gewollt, die parameterlose Methode flaeche() kennt.
Die Klasse Eclipse hingegen, zusätzlich zu der vererbten parameterlosen Methode flaeche(), noch die Methode flaeche(double r, double r1).

Methoden werden nicht nur anhand ihrer Namen unterschieden, sondern auch am Typen und Anzahl der Parameter.

Lösung:

Statt
private double flaeche (double r, double r1) 
in Eclipse einfach nur
public double flaeche()
Damit überschreibst Du die vererbte Methode.

Vielleicht noch eine Meberkung. Die Methode flaeche sollte public sein, sonst kannst Du sie nicht "von ausserhalb" der Klasse aufrufen.

Gruß,
Michael

Antwort 2 von semi

Das in der vorletzten Zeile sollte Bemerkung heissen :-)

Wenn ich mir das ganze überlege, dann würde ich sagen, dass Kreis von Ellipse abgeleitet sein sollte.
Ein Kreis ist eine Sonderform der Ellipse und nicht umgekehrt.

So sieht es dann aus:

public class Ellipse {

  protected int x;
  protected int y;
  protected double r;
  protected double r1;
  protected double flaeche;

  public Ellipse(int x, int y, double r, double r1) {
    this.x  = x;
    this.y  = y;
    this.r  = r;
    this.r1 = r1;
    this.flaeche = r * r1 * Math.PI;
  }

  public double flaeche() {
    return this.flaeche;
  }

}

public class Kreis extends Ellipse {

  public Kreis(int x, int y, double r) {
    super(x, y, r, r);
  }

}

Aber egal. Dir ging es um Vererbung und nicht um Geometrie.

Gruß,
Michael

Antwort 3 von thomasN

Vielen Dank, jetzt hab ich`s verstanden. Wünsche ein schönes Wochenende !
Gruß Thomas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: