Programmieren_2/polymorphie.md

99 lines
2.0 KiB
Markdown

<!--
title: Polymorphie und Vererbung
description: Folien für Polymorphie und Vererbung in Programmieren 2
url: https://git.henriburau.de/tutorien/programmieren-2
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Polymorphie und Vererbung
---
# Typ und Implementation
Der **Typ** ist die Außenansicht auf einen Dienstleister.
- Welche Operationen gibt es?
- Wie rufe ich diese auf?
Die **Implementation** ist die Innenansicht auf einen Dienstleister.
- Wie wird eine Operation umgesetzt?
- Welche Felder habe ich?
---
# Klassen und Interfaces
**Klassen** haben immer eine Doppelrolle, da sie sowohl einen Typ als auch eine Implementation definieren.
**Interfaces** sollten immer nur einen Typ definieren.
---
# Vererbung
Weitergeben von bereits geschriebenen Code an Subklassen. Sinnvoll
auch zum Aufstellen einer Vererbungshierarchie.
- Eine Klasse kann erben von: Klassen und abstrakten Klasse
- Ein Interface kann erben von: Interfaces
---
## Deklaration - Klassen
```java
class Shape {
public String toString() {
return "Shape";
}
}
class Rectangle extends Shape {
public String toString() {
return "Rectangle";
}
}
class Circle extends Shape {
public String toString() {
return "Circle";
}
}
```
---
## Deklaration - Interfaces
```java
// Repräsentiert eine 2D Form
interface Form {
double gibFlaeche();
}
// Repräsentiert ein 2D Dreieck
interface Dreieck extends Shape {
double gibHoehe();
}
```
---
## Benutzung
```java
// In main...
Shape shape = new Shape();
Rectangle rectangle = new Rectangle();
shape.toString();
rectangle.toString();
shape = rectangle;
shape.toString();
```
---
# Aufgaben
* Schreibe eine Klasse `Cow`, welche dieselben Methoden hat wie ein `Sheep`
* Ergänze `Cow` und `Sheep` um eine Methode `String makeNoise()`, ein `Schaf` soll `"Mäh"` zurückgeben, eine `Cow` `"Muh"`.
* Schreibe nun eine Klasse `Animal`. Von dieser Klasse sollen `Sheep` und `Cow` erben. Alle Methoden die bei `Sheep` und `Cow` genau gleich sind, sollen nun in die Superklasse `Animal` verschoben werden.