2017-10-10 15 views
-2

J'ai l'exercice suivant concernant l'héritage et les méthodes de substitution, et la question est pourquoi la méthode 'System.out.println (f1)' dans la méthode 'initialize()' dans la classe parente est appelée avec param '0', et ce qu'il faut faire pour cela sera appelé avec le paramètre '6'. S'il vous plaît, aidez-moi à le comprendre. Merci d'avance.Java Inheritance et programme de remplacement de méthode

public class Solution { 
public static void main(String[] args) { 
    new B(6); 
} 

public static class A { 
    private int f1 = 7; 

    public A(int f1) { 
     this.f1 = f1; 
     initialize(); 
    } 

    protected void initialize() { 
     System.out.println(f1); 
    } 
} 

public static class B extends A { 
    protected int f1 = 3; 

    public B(int f1) { 
     super(f1); 
     this.f1 += f1; 
     initialize(); 
    } 

    protected void initialize() { 
     System.out.println(f1); 
    } 
} 

}

+2

' initialize' n'a pas de * paramètres * ... et vous ne le surchargez pas dans 'B' car c'est une méthode privée. On ne sait pas exactement ce que vous attendez et pourquoi, pour être honnête, mais le fait que vous ayez deux champs avec le même nom ne fera qu'ajouter à la confusion. –

Répondre

0

méthodes privare ne peuvent pas être écrasées. Vous pouvez écrire la méthode dans child mais pratiquement elle ne surcharge pas

De la spécification de langage Java JLS.

Notez qu'une méthode privée ne peut pas être masquée ou remplacée dans le sens technique de ces termes. Cela signifie qu'une sous-classe peut déclarer une méthode avec la même signature qu'une méthode privée dans l'une de ses superclasses, et il n'est pas nécessaire que le type de retour ou la clause throws d'une telle méthode aient une relation avec ceux de la méthode privée dans superclasse.

Votre méthode mère n'est pas appelé avec la valeur du paramètre 0. si vous pouvez voir le constructeur de parent est Outrepasser la valeur this.f1=f1 la valeur de f1 sera 6. Par conséquent, la sortie sera 6 et 9.

+0

Merci pour le lien JLS, ça m'a beaucoup aidé non seulement pour cet exercice! –