Vererbung- Erweiterung von Klassen

Konstruktor 3: Dieser Konstruktor besitzt einen Parameter, um den Zufallsgenerator mit
einem Startwert zu initialisieren, außerdem initialisiert er die Attribute der
Klasse in den oben genannten Grenzen.

Konstruktor 4: Dieser Konstruktor besitzt einen Parameter, der den Startwert des
Zufallsgenerators initialisiert sowie 2 Parameter für die Initialisierung der
Attribute der Klasse mit beliebigen Werten.

Konstruktor 3 fasst einen Parameter, der als Startwert für die Klasse Random dienen soll:
=>
Code:
konstruktor3(startwert) : Random(startwert)
{
}

Den Konstruktor einer Basisklasse kannst du via super aufrufen.

Konstruktor 4 fasst insgesamt 3 Parameter. Einer dient als Startwert, die anderen zwei zur Initialisierung der Grenzen.

Versuch doch jetzt mal damit zu beginnen, dass du eine Klasse anlegst, die von Random erbt. Das hat dir ja Wokaz auch schon beschrieben. Danach schauen wir dann weiter.
 
Also ich bin jetzt so weit...

Java:
import java.util.*

public class MyRandom extends Random {

//Deklaration
privat long UntereGrenze;
privat long ObereGrenze;

// 1. Konstruktor
public MyRandom ()
{
ObereGrenze=126;
UntereGrenze=32;
}

// 2. Konstuktor
public MyRandom (ObereGrenze, UntereGranze)
{
this.ObereGrenze = ObereGrenze
this.UntereGrenze = UntereGrenze
}

// 3.Konstuktor HIER weiß ich nicht wie ichs schreibnen muss
public MyRandom(5) : Random (5)
{
ObereGrenze = 126;
UntereGrenze = 32;
}

// 4. Konstuktor Hier auch nicht
public MyRandom (5, UntereGranze, ObereGrenze) : Random(5)
{
this.ObereGrenze = ObereGrenze
this.UntereGrenze = UntereGrenze
}
}
 
Zum einen brauchen die Parameter deines Konstruktors noch Type:
Java:
public MyRandom (long obereGrenze, long untereGrenze)
...

Und für den dritten und vierten Konstruktor hast du wieder ganz normal einfach die erwähnten Argumente. Als Beispiel Konstruktor 4:
Java:
public MyRandom (long startWert, long untereGrenze, long obereGrenze)
{
   super(startWert);
   this.ObereGrenze = obereGrenze;
   this.UntereGrenze = untereGrenze;
}
 
Also so?
Java:
import java.util.*
 
public class MyRandom extends Random {
 
//Deklaration
privat long UntereGrenze;
privat long ObereGrenze;
privat long StartWert;
 
// 1. Konstruktor
public MyRandom ()
{
ObereGrenze=126;
UntereGrenze=32;
}
 
// 2. Konstuktor
public MyRandom (long ObereGrenze, long UntereGranze)
{
this.ObereGrenze = ObereGrenze;
this.UntereGrenze = UntereGrenze;
}
 
// 3.Konstuktor 
public MyRandom (long StartWert)
{
super(StartWert);
ObereGrenze = 126;
UntereGrenze = 32;
}
 
// 4. Konstuktor 
public MyRandom (long StartWert, long UntereGranze, long ObereGrenze)
{
super(StartWert);
this.ObereGrenze = ObereGrenze;
this.UntereGrenze = UntereGrenze;
}
}

Frage:
Wofür dient das "super"?
Wie mache ich nun weiter?
 
Den Konstruktor einer Basisklasse kannst du via super aufrufen.


Du musst übrigens nicht einen Member StartWert anlegen, denn den Parameter StartWert brauchst du ja nur um den Konstruktor von Random aufzurufen, der einen Startwert erwartet.

Nun musst du die zwei erwähnten Methoden implementieren. Das ist ziemlich einfach, du kannst dazu die von Random geerbten Funktionen verwenden (Random.nextInt).
 
Also mit dem StartWert meinst du in der Deklaration? oder wo?

Mit den Methoden komme ich nicht weiter...
Ich weiß nicht wie ich das mache...

EDIT: man muss doch den 1. Konstruktor mit der 1 Methode aufrufen oder? (wenn ja weiß ich trozdem nicht wie es geht) "leider"
 
Zuletzt bearbeitet:
Genau, du brauchst kein Attribut StartWert in deiner Klasse.

Was ist denn das Problem mit dem Deklarieren der Methoden?
Java:
package de.tutorials;

import java.util.Random;

public class MyRandom extends Random {
	private int ObereGrenze, UntereGrenze;
	
	public MyRandom(int obereGrenze, int untereGrenze) {
		ObereGrenze = obereGrenze;
		UntereGrenze = untereGrenze;
	}
	
	public MyRandom() {
		this(126, 32);
	}
	
	public MyRandom(int seed) {
		this(seed, 126, 32);
	}
	
	public MyRandom(int seed, int obereGrenze, int untereGrenze) {
		super(seed);
		ObereGrenze = obereGrenze;
		UntereGrenze = untereGrenze;
	}
	
	public int getRandom() {
		return getRandom(32, 126);
	}
	
	public int getRandom(int untereGrenze, int obereGrenze) {
		// was kommt hier?
	}
}
 
Das wäre nicht so gut, denn getRandom() ruft ja wieder getRandom(32, 126) auf, usw. Du kannst da die Funktion zur Generierung von Zufallszahlen aus der Klasse Random verwenden von der deine Klasse ja erbt.
 
Zurück