Hallo allerseits,
in dem einfachen Demoprogramm unten gibt die folgende Anweisung eine Fehlermeldung:
wert=nettoGewinn();
weil man in einer static-Methode (hier:static double berechneMaximalenNettoGewinn(...))
nur auf static-Methoden der gleichen Klasse zugreifen kann.
(und nettoGewinn() ist eine nicht static-Methode der gleichen Klasse Gegenstand)
Das ist mir noch klar.
Wenn ich nun diese Zeile
// wert=nettoGewinn();
auskommentiere gibt es - mir unerklärlich - keine Fehlermeldung bei der folgenden Anweisung: (siehe Programm unten)
wert=gegenstaende[0].nettoGewinn();
obwohl wieder die nicht static-Methode nettoGewinn() augerufen wird.
Ich verstehe das nicht.
Wer kann mir das erklären?
in dem einfachen Demoprogramm unten gibt die folgende Anweisung eine Fehlermeldung:
wert=nettoGewinn();
weil man in einer static-Methode (hier:static double berechneMaximalenNettoGewinn(...))
nur auf static-Methoden der gleichen Klasse zugreifen kann.
(und nettoGewinn() ist eine nicht static-Methode der gleichen Klasse Gegenstand)
Das ist mir noch klar.
Wenn ich nun diese Zeile
// wert=nettoGewinn();
auskommentiere gibt es - mir unerklärlich - keine Fehlermeldung bei der folgenden Anweisung: (siehe Programm unten)
wert=gegenstaende[0].nettoGewinn();
obwohl wieder die nicht static-Methode nettoGewinn() augerufen wird.
Ich verstehe das nicht.
Wer kann mir das erklären?
Code:
package staticproblem1;
public class Startklasse {
public static void main(String[] args) {
Auto auto1 = new Auto(20);
Immobilie immo1 = new Immobilie(500);
Auto auto2 = new Auto(40);
Gegenstand[] gegenstaende;
gegenstaende = new Gegenstand[3];
gegenstaende[0]=auto1;
gegenstaende[1]=immo1;
gegenstaende[2]=auto2;
double wert;
wert= Gegenstand.berechneMaximalenNettoGewinn(gegenstaende); // 4P
}
}
abstract class Gegenstand{
public abstract double berechneWert();
public double nettoGewinn(){
return 2.0 * berechneWert();
}
public static double berechneMaximalenNettoGewinn(Gegenstand gegenstaende[]){
double wert=0;
wert=gegenstaende[0].nettoGewinn();
//wert=nettoGewinn(); // <-- Das gibt Probleme
return wert;
}
public void print(){
System.out.println("Wert="+berechneWert());
}
}
class Auto extends Gegenstand{
private double alter;
public Auto(int alter) {
this.alter = alter;
}
public double berechneWert(){
return alter;
}
}
class Immobilie extends Gegenstand{
private double miete;
public Immobilie(double miete) {
this.miete = miete;
}
public double berechneWert(){
return miete;
}
}