Konstruktoren werden nicht vererbt?!

  • Java

  • Geardi123
  • 2448 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Konstruktoren werden nicht vererbt?!

    Hey,

    laut allen Büchern werden ja Konstruktoren nicht vererbt, aber wenn ich folgende Klassen habe:

    Quellcode

    1. package ConstruktorenTest;
    2. public class Klasse{
    3. private String name;
    4. public Klasse(String n){;
    5. name =n;
    6. }
    7. public Klasse (){
    8. this("anonym");
    9. }
    10. @Override
    11. public String toString(){
    12. return name;
    13. }
    14. }
    Alles anzeigen




    Quellcode

    1. package ConstruktorenTest;
    2. public class Erbe extends Klasse{
    3. boolean m;
    4. public int hallo(){
    5. return 5;
    6. }
    7. }
    Alles anzeigen





    Quellcode

    1. package ConstruktorenTest;
    2. public class TesteAlles{
    3. public static void main (String [] args){
    4. Erbe erbe = new Erbe();
    5. erbe.hallo();
    6. System.out.println(erbe);
    7. }
    8. }
    Alles anzeigen

    Dann vererbe ich doch einen Konstruktor?! da ich ja in Erbe keinen definiert habe.

    Außerdem bin ich darauf gestoßen, dass ich nicht erben kann, wenn ich in der Klasse "Klasse" keinen Parameterlosen konstruktor habe.

    Woran liegt das?


    THX schonmal:D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Geardi123 ()

  • Jede Klasse erbt implizit den parameterlosen Konstruktor der Oberklasse, sofern vorhanden. Deine Klasse "Klasse" (spätestens wenn du Fragen zu deinem Code an andere stellst solltest du dir einen besseren Namen überlegen..) erbt also z.B. auch den Konstruktur von Object.

    Daher würde sogar das hier funktionieren:

    Quellcode

    1. public class Klasse { }
    2. public class Erbe extends Klasse{ }
    3. public class Test { public static void main(String[] args) { new Erbe(); }}


    Sobald du aber in Erbe den impliziten Konstruktor überschreibst in "Klasse", also einen Konstruktor mit Parameter definierst, läuft der Aufruf von Erbe() ins Leere.