pp.01.01-Inhertience
Start eines Threads durch und bei Vererbung
- Projekt:
pp.01.01-Inheritance
- Bearbeitungszeit: 15 Minuten
- Musterlösung: 15 Minuten
- Kompatibilität: mindestens Java SE 10
Im Package pp
ist die Klasse Thermometer
, die von Sensor
erbt, welche wiederum von Thread
erbt. Thermomenter
ist also auch ein Thread
und kann nebenläufig durch Aufruf von start()
ablaufen.
Jeder Sensor
ist nebenläufig. Er hat als generische Funktionalität regelmäßig in einem durch das Property frequency
festgelegten Intervall einen Messwert auszulesen. Der Messwert kommt aus der Methode reading()
. Inhaltlich ist Sensor
abstract. Für Testzwecke können jedoch auch von Sensor
Instanzen gebildet werden. Sensor hat eine main
-Methode. Hier wird eine Instanz gebildet und sie läuft nebenläufig los, da das so im Konstruktor bestimmt wird.
Sub-Klassen von Sensor
, wie Thermometer
überschreiben die reading()
-Methode. In Thermometer
sollen in der main
-Methode zwei Instanzen gebildet werden, die mit unterscheidlicher frequency
Messungen vornehmen sollen.
Quellcode von pp.Sensor
package pp;
public class Sensor extends Thread {
// eigentlich abstract
private final long frequency;
public Sensor(long frequency) {
this.frequency = frequency;
start();
}
/**
* @return the frequency
*/
public long getFrequency() {
return this.frequency;
}
protected String reading() {
// eigentlich abstract
return null;
}
@Override
public void run() {
while (true) {
System.out.println("reading: " + reading());
try {
Thread.sleep(this.frequency);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public static void main(String... args) {
var s = new Sensor(1000);
}
}
Quellcode von pp.Thermometer
package pp;
import java.util.Random;
public class Thermometer extends Sensor {
private final Random rand;
public Thermometer(long frequency) {
super(frequency);
this.rand = new Random();
}
@Override
protected String reading() {
return String.format("(%04d freq.): %3d°C", getFrequency(), this.rand.nextInt(100));
}
public static void main(String... args) {
var s1 = new Thermometer(1000);
var s2 = new Thermometer(3000);
}
}
Aufgaben
- Der vorliegende Quellcode ist nur teilweise funktionsfähig. Probieren Sie die
main
-Methoden vonSensor
undThermometer
aus. - Analysieren Sie den Programmablauf.
- Korrigieren Sie das Programm, so dass beide Klassen lauffähig sind.
- Verallgemeinern Sie Ihre “Findings” zu einem kurzen Merksatz!