Add termin3
This commit is contained in:
99
abstract.md
Normal file
99
abstract.md
Normal file
@ -0,0 +1,99 @@
|
||||
<!--
|
||||
title: Abstrakte Klasse
|
||||
description: Folien für abstrakte Klassen in Programmieren 2
|
||||
url: https://git.haw-hamburg.de/pm2-tutorium/slides
|
||||
header: Programmieren 2 **Tutorium**
|
||||
footer: Henri Burau
|
||||
-->
|
||||
|
||||
# Abstrakte Klassen
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Abstrakte Klassen
|
||||
|
||||
In abstrakten Klassen können Operationen **ohne** eine Implementation deklariert werden.
|
||||
|
||||
```java
|
||||
abstract double gibFlaeche();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Abstrakte Klassen
|
||||
|
||||
Eine Klasse mit mindestens einer abstrakten Methode muss abstrakt sein.
|
||||
|
||||
Es können keine Instanzen einer abstrakten Klasse erzeugt werden.
|
||||
|
||||
```java
|
||||
abstract class Form
|
||||
{
|
||||
abstract double gibFlaeche();
|
||||
|
||||
String toString()
|
||||
{
|
||||
return "Form";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Benutzung
|
||||
|
||||
Es können keine Instanzen einer abstrakten Klasse erzeugt werden. Trotzdem definieren die abstrakten Klassen einen Typ.
|
||||
|
||||
```java
|
||||
// Deklaration
|
||||
class Kreis extends Form {
|
||||
private double _radius;
|
||||
|
||||
Circle(double rad) {radius = rad;}
|
||||
|
||||
double gibFlaeche(){
|
||||
return 3.14 * radius * radius;
|
||||
}
|
||||
}
|
||||
|
||||
// Benutzung
|
||||
Form form1 = new Kreis(4.5);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Verwendung
|
||||
|
||||
Abstrakte Klassen werden immer benutzt wenn Code wiederverwendet werden soll, aber nicht alle Details bekannt sind. Dabei wird häufig das Prinzip der Schablonen- und Einschubmethoden genutzt.
|
||||
|
||||
```java
|
||||
abstract class DreidimensionaleForm {
|
||||
private double _hoehe;
|
||||
|
||||
abstract double gibFlaeche();
|
||||
|
||||
double gibVolumen() {
|
||||
return gibFlaeche() * _hoehe;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
* Welche Methode ist die Einschubmethode und welche die Schablonenmethode?
|
||||
|
||||
---
|
||||
|
||||
# Übung
|
||||
|
||||
1) Müssen alle abstrakten Methoden eine abstrakten Klasse in einer Subklasse implementiert werden?
|
||||
* Ja, denn ansonsten fehlt für manche Operationen die Implementation.
|
||||
|
||||
2) Sind alle Felder der abstrakten Klasse auch in der Subklasse enthalten?
|
||||
* Ja
|
||||
|
||||
3) Darf auf alle Felder der Superklasse aus der Subklasse zugegriffen werden?
|
||||
* Nur solange die Modifier `private`, `protected` oder `package private` sind.
|
||||
|
||||
---
|
||||
|
||||
4) Ändere die Klasse `Animal` zu einer abstrakten Klasse. Alle Methoden die bei `Sheep` und `Cow` gleich sind müssen nicht abstrakt sein. Füge aber eine abstrakte Methode `String makeNoise()` ein. Ändere den Code and den richtigen Stellen ab.
|
||||
Reference in New Issue
Block a user