kann nicht auf roomNumber vor Supertyp Konstruktor aufgerufen wurde
erstellt habe ich zwei Klassen Standard
und Family
die eine Erweiterung der abstrakten Klasse Room
, bei der Erstellung der Standard
Klasse ich bin erfüllt mit der Fehlermeldung "kann nicht auf roomNumber vor Supertyp-Konstruktor aufgerufen wurde," aber ich kann nicht verstehen, warum, jede mögliche Hilfe würde geschätzt.
Room
public abstract class Room
{
public int roomNumber;
public String roomType;
public boolean ensuite;
public boolean available;
public Room(int roomNumber, boolean enSuite)
{
this.roomNumber = roomNumber;
ensuite = enSuite;
available = false;
}
}
Standard
public class Standard extends Room
{
private int roomNumber;
private int childCap;
private int adultCap;
public Standard(int theNumber, int kidsCap, int adultsCap)
{
super(theNumber, roomNumber);
childCap = childsCap;
adultCap = AdultsCap;
}
}
- Warum hast du redeclare roomNumber in der Standard-Klasse? Ich denke, dass ist das problem
- PS dies hat eine Reihe von Fragen, die Sie möglicherweise wünschen, um aufzuräumen. Der Standard-Konstruktor hat zwei Fehler bei der Kompilierung. Sie vorbei sind roomNumber anstelle von "enSuite" als param -- sind Sie nicht auch der gleiche Typ. Ihre "Bad = Bad" - Anweisung ist verwirrend, aufgrund der Namen, die unterschiedlicher kaum einer groß - / Kleinschreibung, Verwendung von öffentlichen Bereichen ist ein no-no, und schließlich versteckt sich ein öffentlicher Bereich mit einem privaten in eine Unterklasse gebunden ist, um Verwirrung zu Stiften!
- Danke Jungs, hat eine Weile gedauert, aber ich verstehe, was du gemeint, und ich habe das problem behoben
Du musst angemeldet sein, um einen Kommentar abzugeben.
super(theNumber, roomNumber);
beim Aufruf eines super-Konstruktors muss es sein, das erste, was Sie tun. Sie versuchen, zu senden dem privaten Bereich roomNumber als parameter.
on a side note, die Raum-Konstruktor ein int und ein boolean-Wert, während Sie das senden von zwei int-Werten.
public Room(int roomNumber, boolean enSuite)
Wenn dir dieses Schreibe, und der compiler sucht nach einer super-Konstruktor, der zwei
int parameter
, aber es gibt keinen solchen Konstruktor. Ihr Konstruktor hat einenint
und eineBoolean
.In Java , wenn der übergeordnete Konstruktor kann nicht machen, die rufen wegen jedem Zustand, dann sollte der compiler zeigt es als Fehler an.
Vom JLS-8.8.7.1
Sie verweisen
roomNumber
im Standard, der nur verarbeitet, von der JVM einmal der Konstruktor der Raum() beendet die Verarbeitung. - Klasse-level-Variablen werden nur verarbeitet und initialisiert, die von der JVM einmal die Konstruktoren aller Oberklassen haben, wurde erfolgreich zurückgegeben. Also, Ihr Anruf-Kette ist so etwas wie:Standard - () - > Room() -> [ initialisieren Zimmer-member-Variablen] -> Rückkehr aus dem Zimmer() -> [initialisieren Standard-member-Variablen]
Als solche, die Sie nicht passieren können, roomNumber bis zu Zimmer, weil in der Tat wird es noch nicht vorhanden.