From 9080f1f304ca4185b2ac450da93bbae53d06e3d6 Mon Sep 17 00:00:00 2001 From: Sebastian Eidecker Date: Thu, 7 Nov 2019 19:55:26 +0000 Subject: [PATCH] --- %C3%9Cberladen-und-%C3%9Cberschreiben-von-Methoden.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/%C3%9Cberladen-und-%C3%9Cberschreiben-von-Methoden.md b/%C3%9Cberladen-und-%C3%9Cberschreiben-von-Methoden.md index 3ea5a90..726791c 100644 --- a/%C3%9Cberladen-und-%C3%9Cberschreiben-von-Methoden.md +++ b/%C3%9Cberladen-und-%C3%9Cberschreiben-von-Methoden.md @@ -11,6 +11,7 @@ Methoden müssen unterschiedlich genug sein, ansonsten Compilefehler. Folgende R - Methoden aus Oberklassen können in Unterklassen überladen werden - Konstruktoren können auch überladen sein, aber nicht überschrieben - Die tatsächliche Methode wird zur Compilezeit ermittelt (und damit der deklarierte Typ, nicht der tatsächliche zur Laufzeit). +- Gilt auch für statische Methoden, auch in Klassenhierarchie. #### Primitive und Autoboxing - Wenn perfekt passende Methode vorhanden wird sie ausgewählt (sowohl bei Primitiven als auch bei Wrapper) @@ -34,6 +35,11 @@ Methoden in Unterklassen können solche in Oberklassen überschreiben. Folgende - Selbe oder weniger restriktive Sichtbarkeit. Restriktiver nicht erlaubt. **Achtung:** Compilefehler, wenn Regeln für Überschreiben erfüllt, evtl. aber auch überladen. - Kann weniger oder eingeschränktere checked Exceptions werfen, aber nicht mehr oder breitere. Unchecked beliebig. - Die tatsächliche Methode wird zur Laufzeit anhand des tatsächlichen Typs ermittelt. +- `static`-Elemente werden nicht vererbt + - Können damit auch nicht überschrieben werden (aber neu definiert oder überladen, müssen also Überladen-Regeln befolgen). + - Deklarierter Typ entscheidend, nicht tatsächlicher zur Laufzeit. + - Sind in der Subklasse sichtbar und können über die Referenz angesprochen werden #### Zugriff -- per `super.methode()` Zugriff auf super-Implementierung. `Klasse.super.methode()` geht auch. Bei Interfaces muss es `Interface.super.methode()` sein. \ No newline at end of file +- per `super.methode()` Zugriff auf super-Implementierung. `Klasse.super.methode()` geht auch. Bei Interfaces muss es `Interface.super.methode()` sein. +- `super` kann nicht in einem statischen Kontext aufgerufen werden. `super` kann aber in einem nicht-statischen Kontext verwendet werden, um auf die Elemente zuzugreifen \ No newline at end of file