Hallo Java Forum,
wir haben zur Zeit eine Hausaufgabe, wo wir eine abstrakte Klasse vervollständigen sollen.
Mein Code sieht bisher wie folgt aus:
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:
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:
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.
wir haben zur Zeit eine Hausaufgabe, wo wir eine abstrakte Klasse vervollständigen sollen.
Mein Code sieht bisher wie folgt aus:
Java:
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");
}
}
Java:
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;
}
}
Java:
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;
}
}
Java:
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;
}
}
Java:
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:
Java:
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:
Java:
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.
Zuletzt bearbeitet: