Wir im Titel schon gesagt. Hier die Klassen. Vielleicht findet ihr ja noch mehr
Hier meine Lösung:
Klasse Fahrzeug:
Zeile 12.
Erstens kann man keine 2 modifier hintereinander schreiben,
desweiteren passt hier weder abstract noch final zum Aufbau der Klasse.
Wir können von Final Klassen keine Klassen ableiten.
Wenn die Klasse abstract sein sollen, dann dürfen keine Methoden
wie print() genauer implementiert sein. Dann das entspricht nicht
dem Zweck von Abstrakten Klassen. Abstrakte Klassen definieren
Methode sozusagen "roh" und werden in den Kindklassen
überschrieben.Die Methoden sind deklariert aber nicht defniert
Desweiteren ist hier keine Methode abstract,so
dass wir gar nicht den modifier abstract verwenden könnten,weil
Abstrakte Klassen mindestens eine Abstrakte Methode enthalten müssen,
damit sie abstrakt sein können.
Ich schlage als modifier public für die Klasse vor.
Die Klasse enhält private Attribute. Diese können bei
Vererbung nicht vererbt werden. Es müssten müssten public get und
setmethoden implementiert werden,damit wir auf die attribute
der Oberklasse zugreifen können.
Ansonsten sind die Attribute nur in der Klasse selber sichtbar
und das nützt,wenn wir Vererbung realisieren wollen gar nichts.
Klasse PKW:
Hier gilt das gleiche mit den Private attributen wie in der Klasse
Fahrzeug.
Zeile 16: super() muss der erste Aufruf im Konstruktor sein:
public Pkw(){
super();
fahrzeugtyp = "PKW";
....
}
Klasse Motorrad:
Die Oberklasse von Motorrad besitzt einen parametrisierten Konstruktor.
Und nur diesen.Keinen parameterlosen. Da die Klasse Motorrad
keinen Konstruktoraufruf tätigt,generiert der compiler super(), aber dieser
Aufruf schlägt fehlt, da kein parameterloser konstruktor vorhanden ist.
Desweiteren hat die Methode print keinen Rückgabewert in dieser Klasse.
Wenn die Methode print aus der Oberklasse überschrieben werden soll,
dann muss sie auch denselben Rückgabewert haben (hier: void).
Klasse Fahrzeugtest:
Zeile 27:
Die Summe ist vom Typ Float,so dass wir ihr überhaupt keinen Wert von int zuweisen können.
Die Methode getPreis existiert gar nicht.
Java:
0 // Datei: Fahrzeug.java
1
2 import java.util.*;
3 abstract final class Fahrzeug {
4 protected static String fahrzeugtyp = "";
5 private float preis;
6 private String herstellerName;
7 protected static Scanner scanner = new Scanner (System.in);
8 public Fahrzeug() {
9 System.out.print("\nGeben Sie den Herstellernamen ein: ");
10 herstellerName = scanner.next();
11 System.out.print("Geben Sie den Preis ein: ");
12 try {
13 preis = scanner.nextFloat();
14 } catch (InputMismatchException e) {
15 System.out.println ("Keine gueltige Preisangabe!");
16 System.exit(1);
17 }
18 }
19 public void print() {
20 System.out.println();
21 System.out.println("Herstellername : " + herstellerName);
22 System.out.println("Preis : " + preis);
23 }
24 }
0 // Datei: Pkw.java
1 class Pkw extends Fahrzeug {
2 private String modellBezeichnung;
3 public Pkw() {
4 fahrzeugtyp = "Pkw";
5 super();
6 System.out.print("Geben Sie die Modellbezeichnung ein: ");
7 modellBezeichnung = scanner.next();
8 }
9 public void print() {
10 System.out.println ("Typ : " + fahrzeugtyp);
11 System.out.println ("Modellbezeichnung: " + modellBezeichnung);
12 }
13 }
0 // Datei: Motorrad.java
1 class Motorrad extends Fahrzeug {
2 public Motorrad() {
3 fahrzeugtyp = "Motorrad";
4 }
5
5 public print() {
6 System.out.println ("Typ : " + fahrzeugtyp);
7 }
8 }
0 // Datei: FahrzeugTest.java
1
2 public class FahrzeugTest {
3 public static void main (String args[]) {
4 System.out.println ("Start des Programms");
5 // Anlegen eines Arrays aus 6 Fahrzeugen
6 Fahrzeug[] fahrzeuge;
7 // Die ersten 3 Elemente des Arrays sollen mit Pkws gefuellt werden
8 System.out.println();
9 System.out.println ("3 Pkws");
10 fahrzeuge [0] = new Pkw();
11 fahrzeuge [1] = new Pkw();
12 fahrzeuge [2] = new Pkw();
13 // Die drei letzten Elemente mit Motorraedern fuellen
14 System.out.println();
15 System.out.println ("3 Motorraeder");
16 fahrzeuge [3] = new Motorrad();
17 fahrzeuge [4] = new Motorrad();
18 fahrzeuge [5] = new Motorrad();
19 // Geben Sie in einer Schleife fuer alle Array-Elemente die
20 // entsprechenden Datenfelder aus
21 for (int i = 0; i < 6; i++) {
22 fahrzeuge [i].print();
23 }
24 // Ermittlung des Gesamtwerts aller Fahrzeuge
25 float summe = 0;
26 for (int i = 0; i < 6; i++) {
27 summe += fahrzeuge [i].getPreis();
28 }
29 System.out.println ("\n\nGesamtwert aller Fahrzeuge: " + summe);
30 }
31 }
Hier meine Lösung:
Klasse Fahrzeug:
Zeile 12.
Erstens kann man keine 2 modifier hintereinander schreiben,
desweiteren passt hier weder abstract noch final zum Aufbau der Klasse.
Wir können von Final Klassen keine Klassen ableiten.
Wenn die Klasse abstract sein sollen, dann dürfen keine Methoden
wie print() genauer implementiert sein. Dann das entspricht nicht
dem Zweck von Abstrakten Klassen. Abstrakte Klassen definieren
Methode sozusagen "roh" und werden in den Kindklassen
überschrieben.Die Methoden sind deklariert aber nicht defniert
Desweiteren ist hier keine Methode abstract,so
dass wir gar nicht den modifier abstract verwenden könnten,weil
Abstrakte Klassen mindestens eine Abstrakte Methode enthalten müssen,
damit sie abstrakt sein können.
Ich schlage als modifier public für die Klasse vor.
Die Klasse enhält private Attribute. Diese können bei
Vererbung nicht vererbt werden. Es müssten müssten public get und
setmethoden implementiert werden,damit wir auf die attribute
der Oberklasse zugreifen können.
Ansonsten sind die Attribute nur in der Klasse selber sichtbar
und das nützt,wenn wir Vererbung realisieren wollen gar nichts.
Klasse PKW:
Hier gilt das gleiche mit den Private attributen wie in der Klasse
Fahrzeug.
Zeile 16: super() muss der erste Aufruf im Konstruktor sein:
public Pkw(){
super();
fahrzeugtyp = "PKW";
....
}
Klasse Motorrad:
Die Oberklasse von Motorrad besitzt einen parametrisierten Konstruktor.
Und nur diesen.Keinen parameterlosen. Da die Klasse Motorrad
keinen Konstruktoraufruf tätigt,generiert der compiler super(), aber dieser
Aufruf schlägt fehlt, da kein parameterloser konstruktor vorhanden ist.
Desweiteren hat die Methode print keinen Rückgabewert in dieser Klasse.
Wenn die Methode print aus der Oberklasse überschrieben werden soll,
dann muss sie auch denselben Rückgabewert haben (hier: void).
Klasse Fahrzeugtest:
Zeile 27:
Die Summe ist vom Typ Float,so dass wir ihr überhaupt keinen Wert von int zuweisen können.
Die Methode getPreis existiert gar nicht.