Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Vor zwe/drei Wochen begannen wir in der Schule mit java. Ich fand ein kleines Beispiel, das die Oberfläche eines Zylinders berechnen soll. Ich habe eine Klasse Kreis und eine Klasse Zylinder. In der Klasse Kreis soll in einer Methode die Fläche berechnet werden. Diese Methode braucht man in der Klasse Zylinder um die Oberfläche zu berechnen. Hier mal der Code:
Code:
class Kreis{
private double r;
private double radius;
public void setRadius(double r){
radius = r;
}
public double flaeche(){
return 3.14*r*r;
}
public Kreis(double r){
radius = r;
}
}
und
Code:
import java.io.*;
import java.lang.*;
public class Zylinder extends Kreis{
private double hoehe;
public static void main(String[] args){
Kreis meinZylinder;
meinZylinder = new Kreis(12);
public double flaeche(){
double fl, umf;
ufm = super.umfang();
fl = super.flaeche();
return 2*fl + hoehe*umf;
}
}
}
Die Klasse Kreis wird ohne Meldungen kompiliert (in der Konsole mit javac), aber bei der Klasse Zylinder kommt folgendes:
Zylinder.java:12: illegal start of expression
public double flaeche(){
^
Zylinder.java:19: class, interface, or enum expected
}→
^
2 errors
Ich suche schon recht lange nach einer Erklärung dieser Fehler, aber ich fand nirgendswo eine Lösung. Vielleicht sieht jemand von euch meine/n Fehler.
hm... jetzt habe ich es nach der main-operation geschrieben. nun kommen die fehler:
Zylinder.java:4: cannot find symbol
symbol : constructor Kreis()
location: class Kreis
public class Zylinder extends Kreis{
^
Zylinder.java:13: cannot find symbol
symbol : method umfang()
location: class Kreis
umf = super.umfang();
^
2 errors
wozu selber Java lernen wenn man andere nerven kann, was?
wenn die Oberklasse keinen Default-Konstruktor ohne Parameter hat,
dann musst du in Subklassen explizit angeben, welcher Konstruktor zu verwenden ist,
z.B.
Code:
public Zylinder(){
super(99);
}
--------
die Operation umfang() ist schlicht nirgendwo vorhanden,
muss man dir das wirklich erst sagen?
Dass die Operation umfang nicht vorhanden ist habe ich auch gemerkt...
Braucht dann jede Klasse einen Konstruktor ohne Parameter?
Das sieht für mich wie der Konstruktor der Klasse Zylinder aus, vielleicht liege ich auch falsch.
Code:
public Zylinder(){
super(99);
}
Was bedeutet dann hier super(99) genau? Hat r nacher den Wert 99?
Wäre es dann nicht sinnvoller zuerst ein kreis mit einer Fläche zu erstellen und diesen dann vererben und dann in der Klasse Zylinder einen zylinder mit der Fläche des kreises zu erstellen?
Vielen Dank für di Hilfe, hab es zum laufen gebracht!!
Werde das mit der Vererbung und den Konstruktoren mal noch genauer studieren, aber danke für diese Information