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


Anmelden zum Antworten