Ich habe den einfachen Weg mir `this.getClass().getSimpleName()` gewählt, das klappt gut.
Hier der entsprechende Code, Zeile 84 (das Programm ist in der Zwischenzeit umfangreicher geworden):
[CODE=java]import java.util.*;
public class kapitel13a3 {
public static void main(String[] args) {
Auto a1 = new Auto("Audi", "quattro", 12500, 4, 150, 210, 60, 4, 5);
LKW l1 = new LKW("Iveco", "longliner", 360000, 8, 300, 90, 250, 11, 30);
a1.allInfosAboutTHISFahrzeug();
l1.allInfosAboutTHISFahrzeug();
askUserForNextOperation ();
System.out.println("Ende des Programms");
}
public static void askUserForNextOperation () {
Scanner askUserForNextOperation = new Scanner(System.in);
int input=99;
do {
System.out.println("\nWillst du eine Funktion dieses Programms nutzen? Ja= 1, Nein=2");
input = askUserForNextOperation.nextInt();
if (input==1){
proposeOptionstoUser();
} if (input==2){
System.out.println("Gut, dann geht's zum folgenden Programmschritt.");
}
} while ((checkUserInput(2, input))==false);
}
public static void proposeOptionstoUser () {
Scanner proposeOptionstoUser = new Scanner (System.in);
int input=99;
do {
System.out.println
("\nWillst du\n1: tanken\n2: fahren\n3: ein neues Fahrzeug generieren?");
input = proposeOptionstoUser.nextInt();
System.out.println();
if (input==1){
System.out.println("Tanken wird gestartet");
//tanken (); //geht nicht weil ich gerade in einer statischen Methode bin
}
if (input==2) {
System.out.println("Fahren wird gestartet");
//fahren (); //geht nicht weil ich gerade in einer statischen Methode bin
}
if (input==3) {
System.out.println("Generieren wird gestartet");
//fahrzeugGenerieren (); //geht nicht weil ich gerade in einer statischen Methode bin
}
}
while ((checkUserInput(3, input))==false);
askUserForNextOperation();
}
//Hier wird geprüft, ob die User-Eingabe mit den Anzahl Optionen übereinstimmt
public static boolean checkUserInput (int numberOfOptions, int userChoice){
boolean userInputPossible;
if (userChoice< (numberOfOptions+1)) {
if (userChoice>0){
userInputPossible = true;
} else {
System.out.println("Der eingebene Wert ist ungueltig.");
userInputPossible = false;
}
} else {
System.out.println("Der eingebene Wert ist ungueltig.");
userInputPossible = false;
}
return userInputPossible;
}
}
abstract class Fahrzeug{
String marke, modell;
double preis;
int anzahlRaeder;
public void fahren () {}
public void allInfosAboutTHISFahrzeug (){
System.out.println(
"\nDas Modell "+modell+
" der Marke "+marke+
//Hier soll die Methode aufgerufen werden, die den ClassType bestimmt.
" ist ein "+this.getClass().getSimpleName()+
".\nEs kostet "+preis+" Franken und hat "+anzahlRaeder+" Raeder.");
}
public Fahrzeug(String marke, String modell, double preis, int anzahlRaeder) {
this.marke = marke;
this.modell = modell;
this.preis = preis;
this.anzahlRaeder = anzahlRaeder;
}
}
abstract class Benziner extends Fahrzeug{
int ps, maxGeschwindigkeit;
double verbrauchPro100k, Reichweite, aktuellerTankstand, tankSize;
final double preisProLiterBenzin = 1.55;
public double berechneKostenfuersVolltanken (){
if (aktuellerTankstand>tankSize){
System.out.println("Es kann nicht mehr Benzin im Tank sein als dessen Fassungsvermoegen.\nNaja, ich ignoriere das mal.");
}
return (tankSize-aktuellerTankstand)*preisProLiterBenzin;
}
public Benziner(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
double tankSize, double verbrauchPro100k) {
super(marke, modell, preis, anzahlRaeder);
this.ps = ps;
this.maxGeschwindigkeit = maxGeschwindigkeit;
this.tankSize = tankSize;
this.verbrauchPro100k = verbrauchPro100k;
Reichweite = berechneReichweite();
}
public void allInfosAboutTHISFahrzeug (){
super.allInfosAboutTHISFahrzeug();
System.out.println("Dieses Fahrzeug hat eine maximale Geschwindigkeit von "+maxGeschwindigkeit+
" kmh und eine Leistung von "+ps+" PS.\nSein Tank fasst "+tankSize+
" Liter, damit kann es bei einem Verbrauch von "+verbrauchPro100k+
" L/100km "+Reichweite+
" km weit fahren."
);
}
public double berechneReichweite (){
return Math.rint(((tankSize/verbrauchPro100k)*100));
}
}
class Auto extends Benziner {
int maxPassagiere;
public Auto(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
double tankSize, double verbrauchPro100k, int maxPassagiere) {
super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, verbrauchPro100k);
this.maxPassagiere = maxPassagiere;
}
public void allInfosAboutTHISFahrzeug (){
super.allInfosAboutTHISFahrzeug();
System.out.println("Maximal "+maxPassagiere+" Passagiere passen in dieses Auto.");
}
}
class LKW extends Benziner {
int maxLadung;
public LKW(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
double tankSize, double verbrauchPro100k, int maxLadung) {
super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, verbrauchPro100k);
this.maxLadung = maxLadung;
}
public void allInfosAboutTHISFahrzeug (){
super.allInfosAboutTHISFahrzeug();
System.out.println("Dieser LKW kann "+maxLadung+" Tonnen laden.");
}
}
class Fahrrad extends Fahrzeug {
double kalorienverbrauchProKm, gewicht;
int anzahlGaenge;
public void essen () {}
public Fahrrad(String marke, String modell, double preis, int anzahlRaeder, double kalorienverbrauchProKm,
double gewicht, int anzahlGaenge) {
super(marke, modell, preis, anzahlRaeder);
this.kalorienverbrauchProKm = kalorienverbrauchProKm;
this.gewicht = gewicht;
this.anzahlGaenge = anzahlGaenge;
}
}
[/CODE]
Danke an alle, ich weiss Eure Hilfe zu schätzen!
PS: Ich hab' zum gleichen Programm noch eine neue Frage gestellt. Das es um was anderes geht, hab' ich einen neuen thread aufgemacht. Gebt Bescheid, falls das besser hier rein soll.