# Abstrakte Klassen - Probleme



## DerBobby (12. Jan 2013)

Hallo Java Forum,

wir haben zur Zeit eine Hausaufgabe, wo wir eine abstrakte Klasse vervollständigen sollen.

Mein Code sieht bisher wie folgt aus:


```
public class Test {

    public static void main(String[] args) {

    Punkt a = new Punkt(-2.250, 7.375);
    Punkt b = new Punkt(0.500, 0.500);
    Punkt c = new Punkt(3.750, -7.625);
    Punkt mittelpunkt = new Punkt(5.0, 5.0);
    double r = 1.0;

    Figur dreieck = new Dreieck(a, b, c);
    System.out.printf("Dreieck Flaeche: " + "%9.5f%n", dreieck.inhalt());
    System.out.printf("Dreieck Umfang:  " + "%9.5f%n", dreieck.umfang());
    System.out.println("\n");

    Figur kreis = new Kreis(mittelpunkt, r);
    System.out.printf("Kreis Flaeche:   " + "%9.5f%n", kreis.inhalt());
    System.out.printf("Kreis Umfang:    " + "%9.5f%n", kreis.umfang());
    System.out.println("\n");

    System.out.println("Vergleich der Flaechen der Figuren (Dreieck ist <, >, = Kreis):");
    System.out.println("-1 bedeutet <, 1 bedeutet >, 0 bedeutet = :");
    System.out.println("Ergebnis ist: " + dreieck.compareTo(kreis));

    System.out.println(dreieck.equals(dreieck) + "\n");
    System.out.println(dreieck.toString() + "\n");

    System.out.println(kreis.equals(kreis) + "\n");
    System.out.println(kreis.toString() + "\n");
    }
}
```


```
abstract class Figur implements Comparable {

    abstract double inhalt();
    abstract double umfang();

    public int compareTo(Object object) {
    
        if (this.inhalt() < ((Figur)object).inhalt()) {

            return -1;

        } else if (this.inhalt() > ((Figur)object).inhalt()) {

            return 1;
        }
        return 0;   
    }
}
```


```
class Kreis extends Figur {

    Punkt mittelpunkt;
    double r;


    Kreis(Punkt mittelpunkt, double r) {

        this.mittelpunkt = mittelpunkt;
        this.r = r;
    }

    public Punkt getMittelpunkt() {

        return this.mittelpunkt;
    }

    public boolean equals(Object kreis) {

        if (kreis instanceof Kreis) {

            return true;

        } else

            return false;
    }

    public Object clone() {

        return new Kreis(this.mittelpunkt, this.r);
    }

    public String toString() {

        return "Mittelpunkt des Kreises: " + this.mittelpunkt.toString() + "\n" + ", Radius des Kreises: " + this.r;
    }

    public double inhalt() {

            if (r > 0) {
                double inhalt = Math.PI * Math.pow(this.r, 2.0);

                return inhalt;

            } else

                return 0.0;
    }
    
    public double umfang() {

        double umfang = 2 * Math.PI * this.r;
        return umfang;
    }
}
```


```
class Dreieck extends Figur {

    public Punkt a;
    public Punkt b;
    public Punkt c;

    Dreieck(Punkt a, Punkt b, Punkt c) {

        this.a = a;
        this.b = b;
        this.c = c;
    }

    public double getAB() {

        double seitenlängeAB = this.a.abstand(b);
        return seitenlängeAB;
    }

    public double getBC() {

        double seitenlängeBC = this.b.abstand(c);
        return seitenlängeBC;
    }

    public double getCA() {

        double seitenlängeCA = this.c.abstand(a);
        return seitenlängeCA;
    }

    public boolean equals(Object dreieck) {

        if (dreieck instanceof Dreieck) {

            return true;

        } else

            return false;
    }

    public Object clone() {

        return new Dreieck(this.a, this.b, this.c);
    }

    public String toString() {

        return "Aktuelle Punkte des Dreiecks: " + this.a.toString() + ", " + this.b.toString() + ", " + this.c.toString();
    }

    public double inhalt() {

        double s = (this.getAB() + this.getBC() + this.getCA()) / 2; 
        double inhalt = Math.sqrt(s * (s - this.getAB()) * (s - this.getBC()) * (s - this.getCA()));

        return inhalt;
    }
    
    public double umfang() {

        double umfang = this.getAB() + this.getBC() + this.getCA();
        return umfang;

    }
}
```


```
public class Punkt {

    private double x;

    private double y;


    public Punkt(double x, double y) {

        this.x = x;
        this.y = y;
    }

    public String toString() {

        return "(" + this.x + ", " + this.y + ")";
    } 

    public double abstand() {

        double abstand = Math.sqrt(Math.pow((this.x - 0.0), 2.0) + Math.pow((this.y - 0.0), 2.0));
        return abstand;
    } 
    
    public double abstand(Punkt p) {
       
        double abstandp = Math.sqrt(Math.pow((this.x - p.x), 2.0) + Math.pow((this.y - p.y), 2.0));
        return abstandp;
    }
}
```

Problem ist jetzt nur, dass ich die clone() Methode nicht aufrufen kann in der Klasse Test. Dort kommt immer die Meldung "clone() has protected access in Object". Die Methoden equals() und toString() dagegen funktionieren. Das zweite Problem sind die get-/set-Methoden, die eigebaut werden sollen. Wenn ich z.B. folgende Methoden benutzen möchte:


```
class Kreis extends Figur {
.
.
.
    public double getRadius() {
        return this.r;
    }

    public Punkt getMittelpunkt() {
        return this.mittelpunkt;
    }

    public void setRadius(double r) {
        this.r = r;
    }

    public void setMittelpunkt(Punkt mittelpunkt) {
        this.mittelpunkt = mittelpunkt;
    }
.
.
.
}
```

Weiß ich nicht, wie ich die richtig aufrufen kann. Bekomme immer Fehlermeldungen beim kompilieren der Test.java. Also bei sowas wie "System.out.println(kreis.getMittelpunkt());".

Und wie man hier sieht:


```
class Kreis extends Figur {
.
.
.
    public double inhalt() {

            if (r > 0) {
                double inhalt = Math.PI * Math.pow(this.r, 2.0);

                return inhalt;
            } else
                return 0.0;
    }
}
```

Wollte ich eine if-Bedingung einbauen, damit im Falle das ein negativer Radius eingegeben wird, eine Fehlermeldung kommt. Allerdings kann man in der Methode ja keinen String zugeben. Gibt es eine Möglichkeit, beim else eine Fehlermeldung zurückzugeben?

Danke für jede Hilfe.


----------



## Timothy Truckle (12. Jan 2013)

DerBobby hat gesagt.:


> Wollte ich eine if-Bedingung einbauen, damit im Falle das ein negativer Radius eingegeben wird, eine Fehlermeldung kommt. Allerdings kann man in der Methode ja keinen String zugeben. Gibt es eine Möglichkeit, beim else eine Fehlermeldung zurückzugeben?


Ja, dass nennt sich [JAPI]Exception[/JAPI].
Lesson: Exceptions (The Java™ Tutorials > Essential Classes)
bye
TT


----------



## DerBobby (12. Jan 2013)

Timothy Truckle hat gesagt.:


> Ja, dass nennt sich [JAPI]Exception[/JAPI].
> Lesson: Exceptions (The Java™ Tutorials > Essential Classes)
> bye
> TT



Vielen Dank.

Habe mit throw jetzt eine Fehlermeldung zurückgeben können.


----------

