Einführung in Konstruktoren von Erweiterungen in Java im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. (), Lektion, Seite 721615
https://www.purl.org/stefan_ram/pub/java_erweiterungskonstruktoren_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Konstruktoren von Erweiterungen in Java

Konstruktoren

Konstruktoren werden nicht  vererbt.

Die Erweiterung einer Klasse übernimmt keine Konstruktoren  von ihrer Basisklasse. Daher müssen alle gewünschten Konstruktoren einer Erweiterung immer ausdrücklich deklariert werden. Es wird gegebenenfalls nur ein Fehlkonstruktor generiert, wie bei allen Klassen ohne explizite Deklaration von Konstruktoren.

Main.java

final class Coordinate extends java.awt.geom.Point2D.Double
{ }

public final class Main
{ public static void main( final java.lang.String[] args )
{ final Coordinate coordinate = new Coordinate( 6.0, 7.0 );
java.lang.System.out.println( coordinate ); }}

transcript
Main.java:6: error: constructor Coordinate in class Coordinate cannot be applied to given types;
{ final Coordinate coordinate = new Coordinate( 6.0, 7.0 );
^
required: no arguments
found: double,double
reason: actual and formal argument lists differ in length
1 error

Beispiel: eigene RuntimeException

Main.java

final class TooManyExamplesException extends java.lang.RuntimeException {}

public final class Main
{ public static void main( final java.lang.String args[] )
{ throw new TooManyExamplesException();
java.lang.System.out.println( "println" ); }}

Protokoll
Main.java:6: error: unreachable statement
java.lang.System.out.println( "println" ); }}
^
1 error

Aufrufe anderer Konstruktoren mit »this«
Aufruf des Basisklassen-Konstruktors

Ein Konstruktor einer Erweiterung kann den Konstruktor einer Basisklasse direkt am Anfang  eines Konstruktorrumpfs aufrufen, indem das Schlüsselwort "super" auf eine Argumentliste angewendet wird.

Aussprachehinweise
super ˈsupɚ

In dem Programm "Basisklassenkonstruktor.java" ruft der parametrisierte Konstruktor der Klasse "Erweiterung" den parametrisierten Konstruktor der Basisklasse "Basis" mit "super( x )" auf.

Basisklassenkonstruktor.java
class Basis 
{ Basis( double x ) 
{ java.lang.System.out.println( "Basis( double )" ); }}
final class Erweiterung extends Basis 
{ Erweiterung( double x ) 
{ super( x ); 
java.lang.System.out.println( "Erweiterung( double )" ); }}
public final class Basisklassenkonstruktor 
{ public static void main( String[] args ) 
{ new Erweiterung( 0. ); }}

System.out
Basis( double ) 
Erweiterung( double )

Danach ist in diesem Konstruktorrumpf allerdings kein weiterer Konstruktoraufruf, auch kein this -Aufruf, mehr möglich, weil diese ebenfalls ganz am Anfang stehen müßte, aber diese Stelle schon besetzt ist. Deswegen wird zur Redundanzelimination, also zur Aufnahme sich wiederholender Teile mehrerer Konstruktoren, eine Methodendeklaration  empfohlen.

Vorgabekonstruktion der Basisklasse

Falls ein Konstruktor nicht  mit einem ausdrücklichen Konstruktoraufruf (mit dem Schlüsselwort "super" oder dem Schlüsselwort "this") beginnt, dann wird vom Übersetzer am Anfang des Konstruktorrumpfs stillschweigend die ExplicitConstructorInvocation  "super();" hinzugefügt. Der parameterlose Konstruktor der Basisklasse wird also dann stillschweigend gerufen.

Eventuell vorhandenen Initialisierungen von Variablen in der erweiternden Klasse (wie z.B. »int b = 5«) und der Rest des Konstruktors der erweiternden Klasse werden erst ausgeführt nachdem  der Basiskonstruktor ausgeführt wurde, egal ob der Basiskonstruktor ausdrücklich oder stillschweigend aktiviert wurde (JLS3, 12.5).

In dem Programm "Basisklassenkonstruktor1.java" wird zuerst der parameterlose Konstruktor der Basisklasse ausgeführt, der das Feld "a" auf den Wert "2" setzt. Dies geschieht stillschweigend, obwohl es im Programmtext des Erweiterungskonstruktors nicht ausdrücklich verlangt wird. Anschließend setzt der Konstruktor der Erweiterung den Wert des Feldes "b" auf den Wert "4". Die folgende Ausgabe der beiden Felder legt nahe, daß tatsächlich auch der Konstruktor der Basisklasse ausgeführt wurde.

Basisklassenkonstruktor1.java
class Basis { int a; Basis() { a = 2; }}
class Erweiterung extends Basis  
{ int b = 3;  
Erweiterung() 
{ /* stillschweigender Aufruf des parameterlosen Basiskonstruktors */ 
b = 4; }}
public final class Basisklassenkonstruktor1 
{ public static void main( String[] args ) 
{ Erweiterung e = new Erweiterung();  
java.lang.System.out.println( e.a ); 
java.lang.System.out.println( e.b ); }}

System.out

4

In dem Programm "Basisklassenkonstruktor2.java" scheitert der stillschweigende Aufruf. Weil die Basisklasse einen expliziten Konstruktor besitzt, wird für sie nicht stillschweigend ein parameterloser  Vorgabekonstruktor definiert. Damit hat sie also keinen parameterlosen Konstruktor, so daß der stillschweigende Aufruf in der Erweiterung scheitert.

Basisklassenkonstruktor2.java
class Basis 
{ Basis( double x ) 
{ java.lang.System.out.println( "Basis( double )" ); }}
class Erweiterung extends Basis 
{ Erweiterung( double x ) 
{ /* stillschweigender Aufruf des parameterlosen Basiskonstruktors */ 
java.lang.System.out.println( "Erweiterung( double )" ); }}
public final class Basisklassenkonstruktor2 
{ public static void main( String[] args ) 
{ new Erweiterung( 0. ); }}

Konsole
Test.java:11: cannot resolve symbol 
symbol : constructor Basis () 
location: class Basis 
{ java.lang.System.out.println( "Erweiterung( double )" ); }} 

1 error

Nach einer geeigneten Korrektur kann das Programm übersetzt und dann disassembliert werden. Dadurch wird der stillschweigend erzeugte Aufruf des parameterlosen Basiskonstruktors in dem double -parametrisierten Konstruktor der Erweiterung sichtbar.

Konsole
javap -c Erweiterung
Compiled from Basisklassenkonstruktor2.java
class Erweiterung extends Basis { 
Erweiterung(double); 
}

Method Erweiterung(double) 
0 aload_0 
1 invokespecial #1 <Method Basis()> 
4 getstatic #2 <Field java.io.PrintStream out> 
7 ldc #3 <String "Erweiterung( double )"> 
9 invokevirtual #4 <Method void println(java.lang.String)> 
12 return


Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721615 stefan_ram:721615 source, source code,sourcecode, Programmier sprache java, Java Programm Java Programmiersprache Java Sprache Java Programmierung Programmieren in Java, Die Programmiersprache Java Javapgrammierung, Java-Programmierung, Java2, Java1.2, Java1.3, Java1.4, Java1.5, Java 2, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, Java 1.7, Java 1.8, Java 8, Java 1.9, Java 9, Java 1.10, Java 10, Tiger, Dolphin, objektorientierte Programmierung, Java sun, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721615, slrprddef721615, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_erweiterungskonstruktoren_de