Vererbungsmechanismus
-
Hallo,
ich habe 2 Klassen, wo aber nur noch der Konstruktor ausgeführt wird, der über Super aufgerufen wird, nicht mehr der vererbte Konstruktor. Warum?
public class Player { Player() { System.out.println("p"); } Player(String str) { System.out.println("hello"); } }
public class Cardplayer extends Player implements Serializable{ Cardplayer() { super(""); // Warum nur noch dieser Konstruktor?? Was ist mit dem vererbten parameterlosen? System.out.println("c"); } public static void main(String[] args) { Cardplayer p = new Cardplayer(); try { FileOutputStream fos = new FileOutputStream("myFile.txt"); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(p); os.close(); FileInputStream fis = new FileInputStream("myFile.txt"); ObjectInputStream is = new ObjectInputStream(fis); Cardplayer p2 = (Cardplayer)is.readObject(); is.close(); } catch (Exception x) { System.out.println("exc"); } } }
-
class A{ A(){ super(); // wird implizit aufgerufen } A(String s){ super(); // wird implizit aufgerufen } }
class B extends A{ B(){ super(); // wird implizit aufgerufen } }
so laufen die konstrucktor aufrufe ab, wenn in der ersten zeile der super() aufruf nicht über schrieben wird.
wird im B()-konstruktur explizit super(String s) aufgrufen wird der parameterlose konstruktor A(){} nicht mehr ausgeführt.möchtest du erzwingen dass bei aufruf des parameter behafteten konstruktors auch der standartkonstruktor in A ausgeführt wird musst du in der ersten ZEILE des konstruktors B(String s) den super-aufruf mit this() überschreiben.
class A{ A(){ super(); // wird implizit aufgerufen } A(String s){ this(); } }
-
Stimmt, ich vergaß die Konstruktorverkettung