---
title: 'Default-Methoden aus speziellen Oberschnittstellen ansprechen'
url: 'https://www.tutego.de/blog/javainsel/2012/12/default-methoden-aus-speziellen-oberschnittstellen-ansprechen'
markdown: 'https://www.tutego.de/blog/javainsel/2012/12/default-methoden-aus-speziellen-oberschnittstellen-ansprechen.md'
date: '2012-12-23'
description: 'Eine Unterklasse kann eine konkrete Methode der Oberklasse überschreiben, aber dennoch auf die Implementierung der überschriebenen Methode zugreifen. Allerdings muss der Aufruf über super erfolgen, da sich sonst ein Methodenaufruf rekursiv verfängt. Default-Methoden können andere Default-Methoden a…'
taxonomy:
  category:
    - Insel
    - 'Java 8'
---

# Default-Methoden aus speziellen Oberschnittstellen ansprechen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## Default-Methoden aus speziellen Oberschnittstellen ansprechen

23.12.2012 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

Eine Unterklasse kann eine konkrete Methode der Oberklasse überschreiben, aber dennoch auf die Implementierung der überschriebenen Methode zugreifen. Allerdings muss der Aufruf über super erfolgen, da sich sonst ein Methodenaufruf rekursiv verfängt.

Default-Methoden können andere Default-Methoden aus Oberschnittstellen ebenfalls überschreiben und mit neuem Verhalten implementieren. Doch genauso wie normale Methoden können sie mit super auf Default-Verhalten aus dem übergeordneten Typ zurückgreifen.

Nehmen wir für ein Beispiel wieder zwei erweiterte Schnittstelle Prices und `Buyable` an:

```java
interface Priced {

double price();

default boolean hasPrice() { return price() > 0; }

}

interface Buyable extends Priced {

@Override double price();

@Override default boolean hasPrice() { return Priced.super.hasPrice() || price() == 0; }

}
```

In der Schnittstelle `Priced` sagt der Default-Code von `hasPrice()` aus, dass alles einen Preis hat, was echt über 0 liegt. `Buyable` dagegen nutzt eine andere Definition und implementiert daher das Default-Verhalten neu. Denn `Buyable` definiert `hasPrice()` so, dass auch ein Preis von 0 letztendlich bedeutet, dass es einen Preis hat. In der Implementierung von `hasPrice()` greift `Buyable` auf den Default-Code von `Priced` zurück, um vom Obertyp eine Entscheidung über die Preiseigenschaft zu bekommen, die aber mit der Oder-Verknüpfung noch verallgemeinert wird.

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 8](https://www.tutego.de/blog/javainsel/category/java-8/)

## 2 Kommentare

**Christian Ullenboom** · [23.12.2012 11:51](#comment-4424)

Hm, tja, weiß auch nicht so recht, wie ich die Schnittstelle, die erweitert wird, sonst nennen soll. Super-Interface finde ich auch nicht besser.

**Thomas Eichberger** · [23.12.2012 11:32](#comment-4423)

Obwohl ich zwar deine Artikel SEHR, SEHR schätze, die Übersetzung aller möglichen Ausdrücke auf Deutsch nervt manchmal ziemlich. "Oberschnittstellen"???

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Darf man in einer Java EE-Anwendung mit Class.forName(…) einen Klasse laden?](https://www.tutego.de/blog/javainsel/2012/12/darf-man-in-einer-java-ee-anwendung-mit-class-forname-einen-klasse-laden.md)
- Next: [Klassenimplementierung geht vor Default-Methoden](https://www.tutego.de/blog/javainsel/2012/12/klassenimplementierung-geht-vor-default-methoden.md)
