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 vonSensorundThermometeraus. - Analysieren Sie den Programmablauf.
- Korrigieren Sie das Programm, so dass beide Klassen lauffähig sind.
- Verallgemeinern Sie Ihre “Findings” zu einem kurzen Merksatz!