Erste Schritte Super Constructor mit Array - Liste?

LokiBlaBla

Mitglied
Guten Tag,

ich möchte um hilfreiche Ratschläge suchen, da das allmächtige Google und 2 Tage Zeit nicht umbedingt weitergeholfen haben.

Die Lage ist im groben folgende: Es geht um klassenübergreifendes Nutzen von Attributen und Methoden. Hier am Beispiel einer Klasse "Haltestelle" und einer Klasse "Bus". Da unser Professor sich lediglich auf Beispiele beschränkt ist mein Wissen auf das beschränkt, was ich mir im Rahmen des Internets so anlese.

Dabei wird das Programm so lange geändert bis alles irgendwie "passt". Ich stehe allerdings vor dem Problem, dass ich jetzt zwar durch "extends in den "Bus" alles aus "Haltestelle" vererbt habe, anscheinend aber ein Konstruktor nicht definiert ist (sprich: wohl fehlt).

"Implicit super constructor Haltestelle() is undefined. Must explicitly invoke another constructor"

Dies ist auch im Rahmen des Programms verständlich, denn es geht einmal um einen Konstruktor der einen Namen vergiebt und ein zweites Mal um eine Liste an Arrays.

Die Frage: Wie muss ich die beiden kombinieren?

Hier die Klassen:

Java:
package klassen.busse;

public class Haltestelle {
	
	// Aufgabe 3
	
	// Attribute
	
	String name = "";
	int warten = 0;
	
	// Get und Set
	
	public String getName(){
		return this.name;
	}
	
	public void setName(String name){
		name = this.name;
	}
	
	public int getPersonen(){
		return this.warten;
	}
	
	public void setPersonen(int warten){
		warten = this.warten;
	}
	
	// Zufaellig mehr Leute
	
	public void neueAnkunft(){
		
		int a = (int) Math.random()*5;
		this.warten = warten + a;
	}
	
	public void abholen(int anzahl){
		
		this.warten = warten - anzahl;
	}
	
	public Haltestelle(String name){
		
		this.name = name;
	}
	
}

und entsprechend für den Bus:

Java:
package klassen.busse;

public class Bus extends Haltestelle {
	
	// Aufgabe 3
	
	// Attribute
	
	private int nummer;
	private int anzahl;
	private int kapazitaet;
	private Haltestelle haltestellen[];
	int i = haltestellen.length;
	
	
	// Get

	public int getNummer(){
		return this.nummer;
	}
	
	public void setNummer(){
		nummer = this.nummer;
	}
	
	public int getAnzahl(){
		return this.anzahl;
	}
	
	
	// Aussteigen
	
	public void aussteigen(){
		
		if(anzahl != 0){	
			int a = (int) Math.random()*5;
			if(a<=anzahl){
				anzahl = anzahl - a;
		}	else {
				anzahl = 0;
			}
		} 
	}
	
	// Naechste Haltestelle
	
	public Haltestelle getNachsteHaltestelle(){
		
		if(i < haltestellen.length){
			haltestellen[i] = haltestellen[i+1];
		}
		else {
			haltestellen[i] = haltestellen[0];
		}
		return haltestellen[i];
	}
	
	public void fahreNaechsteHaltestelleAn(){
		
		getNachsteHaltestelle();			// Die naechste Haltestelle wird angefahren. 
		aussteigen();						// Leute steigen aus
		neueAnkunft();						// Die Zahl der Wartenden wird berechnet  	
		if(kapazitaet > warten){			// Geeignet viele Personen steigen in den Bus
			anzahl = kapazitaet - warten;	
		} else {
			anzahl = kapazitaet;
		}
		abholen(anzahl);					// Ebensoviele werden von den Wartenden abgezogen	
	}
	

	// Konstruktor
	
	public Bus(int nummer, int kapazitaet, Haltestelle[] haltestellen){     

[COLOR="DarkOrange"]^ In dieser Zeile steht das rote Kreuz[/COLOR]
		
		nummer = this.nummer;
		kapazitaet = this.kapazitaet;
		haltestellen = this.haltestellen;
		
	}	
}

Da es sich bei mir wirklich um einen Programmieranfänger handelt, seid bitte nicht zu grob :noe:

Mit freundlichen Grüßen,

/e Wie ich grade sehe wird der Fehler natürlich hier nicht angezeigt. Ausgebessert.

Loki
 
M

maki

Gast
Du müsstest explizit eine KOnstruktor aufrufen (mit super(..)), aber das ist ja fast egal denn ein Bus ist doch keine Haltestelle ;)
Vererbung wäre da falsch.
 
B

bygones

Gast
Haltestelle hat einen Konstruktor der einen String erwartet, d.h. alle erbende Klassen muessen mind ebenso einen Konstruktor haben
Java:
public Bus(String name) {
   super(name);
}
der super aufruf muss immer als erstes stehen.


ABER !!!!

Warum erbt Bus von Haltestelle ? das sind doch 2 voellig verschiedene Sachen.

Sprich mal den Satz laut aus und schau was daran falsch ist:
Ein Bus ist eine Haltestelle ?
 

HimBromBeere

Top Contributor
In was für einer Welt ist bitte ein Bus eine Haltestelle? So solltest du eine Vererbungsstrategie eher nicht aufbauen, auch wenn es ziemlich bequem aussieht. Aber z.B. brauchst eine Haltestelle keine MEthode, die sich abholen nennt. Was du damit machen willst, ist klar (du möchztest die Zahl der wartenden Gäste an dr Haltestelle reduzieren). Aber dann solltest du wohl einfach eine setter-Methode für die Anahl schreiben, das wäre dann etwas eher Java-konventionell...

EDIT: WOW, dieser Beitrag hat echt sieben Minuten Schreibzeit gekostet?! Verdammt... zu spät
 

LokiBlaBla

Mitglied
Entschuldigt, das sind wohl die Details, die ich ausgelassen habe.

Die Methode "abholen" wurde uns in der Aufgabenstellung vorgegeben, ebenso, dass es in der entsprechenden Klasse sein muss.

Die Vererbung habe ich angewandt, da ich somit auf einfache Art und weise alle Attribute und Methoden in meine Bus Klasse übertragen konnte - ich habe im Internet keine geschicktere Lösung gefunden.

Falls es eine solche gibt - wie gesagt, ich bin im Umgang mit Java äußerst unerfahren, würde ich es schätzen wenn sich jemand die Zeit nehmen würde und einen kurzen Abriss einer mögliche Lösung skizziert.

Vielen Dank für die bisherigen Antworten, keep it coming :)

/e Nach dem einfügen des Super(name) wird folgender Fehler angezeigt:

"Cannot refer to an instance field name while explicitly invoking a constructor", was die Sache nicht besser aussehen lässt ???:L

Gruß,

Loki
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Du könntest bestenfalls eine Oberklasse Verkerhselement erzeugen, die eine je Methode für den Namen und die mit dem Element verbundenen Personen beinhaltet. Das wäre das einzige, was man - wenn man in diesem Ansatz denn unbedingt eine Vererbungshierarchie inkludieren will - noch grade so zulassen könnte...
 

LokiBlaBla

Mitglied
Es geht NICHT um die Vererbung. Diese wurde nur als Mittel der unwissenden Wahl benutzt um die Klasse Bus mit der Klasse Haltestelle zu verknüpfen und somit die Methoden in beiden zu nutzen.

Also: Das "super" Problem tritt wegen der Vererbung auf - welche Möglichkeiten gibt es, statt einer Vererbung Attribute und Methoden einer Klasse in einer anderen Klasse zu nutzen?

Es geht um: Den Konstruktor Bus. Mit diesem habe ich Probleme, da ich nicht weiß wie ich die Arrays handhaben soll!

Bitte hier um Rat,

Gruß

Loki
 

parabool

Bekanntes Mitglied
Mal so ein Rahmen...

Java:
public class Test {

	public static void main(String[] args) {

		Haltestelle haltestellen[] = new Haltestelle[3];
		haltestellen[0] = new Haltestelle("Station 1");
		haltestellen[1] = new Haltestelle("Station 2");
		haltestellen[2] = new Haltestelle("Station 3");
		haltestellen[1].setAnzahl(10);
		Bus bus = new Bus(5, 10);
		bus.setAnzahl(3);

		for (Haltestelle haltestelle : haltestellen) {
			System.out.println(haltestelle.getName());

			// Operationen für ein - und aussteigen

			System.out.println("anzahl an haltestelle=" + haltestelle.getAnzahl());
			System.out.println("anzahl im bus=" + bus.getAnzahl());
			System.out.println("---");
		}
	}
}

class Bus {

	private int nummer;
	private int anzahl = 0;
	private int kapazitaet;

	public Bus(int nummer, int kapazitaet) {

		this.nummer = nummer;
		this.kapazitaet = kapazitaet;
	}

	public int getNummer() {
		return this.nummer;
	}

	public void setAnzahl(int anzahl) {
		this.anzahl = anzahl;
	}

	public int getAnzahl() {
		return this.anzahl;
	}

	public int getKapazitaet() {
		return kapazitaet;
	}

}


class Haltestelle {

	private String name = "";
	private int anzahl = 0;

	public Haltestelle(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	public int getAnzahl() {
		return this.anzahl;
	}

	public void setAnzahl(int anzahl) {
		this.anzahl = anzahl;
	}
}
}
 

HimBromBeere

Top Contributor
Du könntest einem Bus die Referenz der letzten (oder nächsten/ oder beider) Haltestellen als Instanzvariablen mit auf den Weg geben. Wenn du an der der Haktestelle stehst, rufst du abholen() in der Haltestellen-Instanz auf, um die Leute dort wegzunehmen. Fährst du weiter, musst du natürlich die nächste Haltestelle abspeichern...
Noch besser wäre natrülich, wenn du dem Konsturkor der Buslinine eine Liste aller Haltestellen übergibst.
 

LokiBlaBla

Mitglied
Ich denke langsam bewegen wir uns in die richtige Richtung.

In der Angabenstellung steht leider, dass der Konstruktor die folgende Form haben muss:

Java:
public Bus(int nummer, int kapazitaet, Haltestelle[] haltestellen)

Nun ist meine Frage, was ich mit dem Array Anteil der Parameter machen soll?

Die Nummer und die Kapazität festzulegen funktioniert ja ganz klassisch, aber mit eine Array Parameter habe ich bei Constructoren noch nie zu tun gehabt.

Zweiter Schwachpunkt meines Programms, was ich euren Kommentaren entnehme: Die Vererbung.

Primär ging es mir darum, Methoden und Attribute aus der Klasse Haltestelle in die Klasse Bus zu übertragen, ohne dass diese explizit aufgelistet werden (Angabe). Die Vererbung schien hier richtig,
allerdings fordert sie jetzt im Konstruktor Bus ihren Tribut indem sie eine super() will, die anscheinend nicht definiert ist.

Kann es daran liegen, dass die Arrays genauso "heißen" wie der Konstruktor Haltestelle?

Wie kann ich Attribute & Methoden zwischen Klassen "freischalten" ohne zu vererben?

Außerdem wäre es super, wenn HimBromBeere seinen Beitrag näher erläutern könnte (Code Beispiel?).

Mit freundlichen, leider unwissenden Grüßen,

Loki
 
B

bygones

Gast
Vererbung schien nur richtig, das ist schonmal klar

was du mit den Parameter Haltestelle[] machen sollst koennen wir dir nicht sagen, wir wissen nicht was geschehen soll.

aber ich versuch mal eine generelle Antwort zu geben

Java:
public class Bus {
 private int nummer;
 private int kapazitaet;
 private Haltestelle[] haltestellen;
 private int aktuelleHaltestelle;

 public Bus(int nummer, int kapazitaet, Haltestelle[] haltestellen) {
    this.nummer = nummber;
    this.kapazitaet = kapazitaet;
    this.haltestellen = haltestellen;
    aktuelleHaltestelle = 0;
 }

 public void fahre() {
   Haltestelle aktuell = haltestellen[aktuellHaltestelle];
   System.out.println("Fahre los von " + aktuell.getNamen());
   System.out.println("Habe nun " + nummer + " Passagiere");
   Haltestelle neue = haltestellen[++aktuellHaltestelle];
   System.out.println("Komme an bei " + neue.getNamen());
  if (nummer + neue.getPersonen() > kapazitaet) {
    System.out.println("Bus ist voll");
  }
  else {
  System.out.printlnt("Es steigen " + neue.getPersonen() + " ein");
  nummer += neue.getPersonen();
 }
}

Noch besser wäre natrülich, wenn du dem Konsturkor der Buslinine eine Liste aller Haltestellen übergibst.
mhm rein theoretisch wuerde ich nicht mal das machen... dann lieber eine andere Klasse Fahrplan oder so, die zu einem Bus eine Reihe von haltestellen hat und die Zeiten zb. Ich wuerde die Entity Bus so simpel wie moeglich halten... aber das mag nicht in die Problematik des TO fallen
 
Zuletzt bearbeitet von einem Moderator:

LokiBlaBla

Mitglied
Ich sehe schon, das Thema ist etwas komplexer als ich dachte. Belassen wir es dabei und ich hoffe das Beste. Ich lese derweilen "Java ist auch eine Insel" um einen besseren Einstieg zu finden als ihn mir der Prof bot.

Andere Frage: Was ist an meinem Konstruktor "Haltestelle" in der entsprechenden Klasse "undefined"?
 

hdi

Top Contributor
Wenn du zwei Klassen hast A extends B, und B keinen paremterlosen Konstruktor anbietet, dann muss A einen Konstruktor besitzen, der einen expliziten super-Aufruf von einem der B-Konstruktoren macht:

Java:
class A{

   A(int x){
      // ...
   }
}

Java:
class B extends A{

  B(){
    super(10);
  }

  // und/oder:
  B(int x){
    super(x);
  }
}

Zum besseren Verständnis: Sofern B einen parameterlosen Konstruktor besitzt, kann Java einen impliziten super-Aufruf machen. Da steht quasi in jedem deiner Bus-Konstruktoren ein "super()" in der ersten Zeile. Ist zwar nicht im Code sichtbar, aber dennoch da. Du kannst es auch selbst nochmal explizit hinschreiben. Wenn nun B aber keinen parameterlosen Konstruktor hat, dann kann Java natürlich nix mehr implizit aufrufen, denn die Frage ist ja was dann für Werte für den Aufruf übergeben werden sollen.
 
Zuletzt bearbeitet:

LokiBlaBla

Mitglied
Ich glaube ich habe jetzt umrissen warum Vererbung hier definitiv der falsche Weg war. Allein der super - Constructor macht die Sache ungemütlich.

Also habe ich die Vererbung rausgenommen, das Programm mit get - und set Methoden umgeschrieben statt der blanken Zahlen usw.

Das Problem das bleibt - und das ich nicht verstehe:

Beide Klassen sind im gleichen Paket. Alle Methoden sind als Public deklariert, die Variablen werden über get und set angetastet.

WARUM lassen sich die Methoden aus der einen Klasse NICHT in der anderen Klasse anwenden?!

Nach dem was ich gelesen habe müsste das jetzt problemlos funktionieren :/ Allerdings steht immer (sogar einheitlich bei allen verwendeten Methoden):

The method abholen(int) is undefined for the type Bus

Bitte um rasche Antwort,

Loki
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
A "Super" anwenden Java Basics - Anfänger-Themen 13
mrStudent <? extends T> und <? super T> Java Basics - Anfänger-Themen 1
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M Super(); Java Basics - Anfänger-Themen 1
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
CptK Vererbung Attributtyp in Super-Klasse noch nicht festlegen Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
Queiser Super boolean Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B super vs. this Java Basics - Anfänger-Themen 24
M Was macht super (...)? Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
E this() / super() Java Basics - Anfänger-Themen 7
T super Java Basics - Anfänger-Themen 3
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
O Vererbung this innerhalb von super Java Basics - Anfänger-Themen 7
X Frage zu Sub/Super Klassen Java Basics - Anfänger-Themen 7
V Vererbung (wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? Java Basics - Anfänger-Themen 6
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
K Vererbung (super) Java Basics - Anfänger-Themen 2
C Super und Unterklassen Java Basics - Anfänger-Themen 6
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
A Super Klasse Java Basics - Anfänger-Themen 3
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
S super() im Konstruktor Java Basics - Anfänger-Themen 12
A Shallow copy .super.clone() Java Basics - Anfänger-Themen 2
P Vererbung super() ohne Parameter Java Basics - Anfänger-Themen 2
D Super und Sub-Klassen Java Basics - Anfänger-Themen 2
D super.tostring Java Basics - Anfänger-Themen 8
A Super-Anweisung in abstrakter Klasse Java Basics - Anfänger-Themen 12
K Überschreiben einer "super.super"-Methode Java Basics - Anfänger-Themen 6
Luk10 super() und this Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Frage zu Generics: "super" Java Basics - Anfänger-Themen 16
S super.paint() Java Basics - Anfänger-Themen 4
G Vererbung, Konstruktoranweisungen VOR super() Java Basics - Anfänger-Themen 4
G Variablen initialisieren vor super() Java Basics - Anfänger-Themen 8
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
A Am Buch lesen, nun brauch ich eure Hilfe um mir super() zu erklären Java Basics - Anfänger-Themen 4
J Problem mit super Java Basics - Anfänger-Themen 10
G super operator und incompatible types, simple fehler Java Basics - Anfänger-Themen 8
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
B super methode aufrufen und ergänzen? Java Basics - Anfänger-Themen 5
G Innerhalb von Runnable auf super. zugreifen? Java Basics - Anfänger-Themen 3
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
A Frage zu super, abstracte Klassen und Kapselung Java Basics - Anfänger-Themen 3
G frage zu vererbung (super) Java Basics - Anfänger-Themen 10
G super(null) Java Basics - Anfänger-Themen 7
F Der "super" Ausdruck Java Basics - Anfänger-Themen 4
S was macht super() ? Java Basics - Anfänger-Themen 7
J Konstruktor der Oberklasse und super Java Basics - Anfänger-Themen 1
W super.methode Java Basics - Anfänger-Themen 2
G neues String Array in super() übergeben Java Basics - Anfänger-Themen 3
K java syntax: wofür steht super(screen)? Java Basics - Anfänger-Themen 5
S Verwendung von Super Java Basics - Anfänger-Themen 7
P super an methode übergeben Java Basics - Anfänger-Themen 8
S supertyp steht ohne super in hierachy - eclipse Java Basics - Anfänger-Themen 4
U super-Konstruktor Aufrufen mit Object, dass Exception wirft Java Basics - Anfänger-Themen 2
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
U Interface | constructor injection Java Basics - Anfänger-Themen 5
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
S Copy - Constructor vs clone() Java Basics - Anfänger-Themen 20
F The constructor Vehikel(String, int) is undefined warum?? Java Basics - Anfänger-Themen 4
L constructor cannot be applied... Java Basics - Anfänger-Themen 22
L Constructor is undefined Java Basics - Anfänger-Themen 4
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S CSVReader funktioniert nicht ---- The Constructor CSVReader(String) is undefined Java Basics - Anfänger-Themen 4
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
S The constructor File(URL) is undefined Java Basics - Anfänger-Themen 10
N Klassen constructor Rückgabewert Java Basics - Anfänger-Themen 10
S Constructor und Main Methode Java Basics - Anfänger-Themen 3
S cannot find symbol, symbol: constructor Java Basics - Anfänger-Themen 2
B Copy-Constructor Java Basics - Anfänger-Themen 6
T Cannot refer to an instance field xxx while explicitly invoking a constructor Java Basics - Anfänger-Themen 14
M Was macht bzw. was bringt ein constructor? Java Basics - Anfänger-Themen 12
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
W Default Constructor Java Basics - Anfänger-Themen 4
H OOP java.sql.Date does not have a no-arg default constructor Java Basics - Anfänger-Themen 2
S Array of objects und ständige Constructor-Aufrufe Java Basics - Anfänger-Themen 4
D Unhandled Exception type IOException in Constructor Java Basics - Anfänger-Themen 1
D The constructor Bestellung(Bestellung.Produkt, Bestellung.Kunde) is undefined Java Basics - Anfänger-Themen 15
B Im Constructor anderen Constructor aufrufen Java Basics - Anfänger-Themen 13
U Implementierung Constructor Java Basics - Anfänger-Themen 7
J Hilfe mit Constructor Java Basics - Anfänger-Themen 3
G The constructor is ambiguous Java Basics - Anfänger-Themen 1
S BufferedWriter undefined constructor Java Basics - Anfänger-Themen 5
C Ein letzter Fehler mit dem Constructor ! Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben