2017-09-05 1 views
-6

Débutant ici.programme appelant le constructeur par défaut?

Je ne comprends pas pourquoi ce code affiche la valeur par défaut à mi-chemin. Quelqu'un peut-il prendre l'air?

désolé si le format est faux, la première fois de publication et corrigera si pas correct.

public class officemanager { 
    public static void main(String[] args) { 

     Staffmember aStaffMember = new Staffmember("Steven", "bob"); 
     System.out.println(aStaffMember.toString()); 

     Programmer appleprg = new Programmer("Marion", "bob", "Java"); 
     appleprg.getLanguage(); 
     System.out.println(appleprg.toString()); 

     Doctor dr = new Doctor(); 
     dr.setWard(5); 
     dr.setFirstName("ed"); 
     dr.setLastName("fall"); 

     System.out.println(dr.toString()); 

    } 
} 

SORTIE

Staffmember firstName=Steven, lastName=bob 
Programmer firstName=Marion , lastName=bob language Java 
default constructor 
Doctor firstName=ed , lastName=fall  Ward 5 

Désolé les gars ici la classe le constructeur par défaut est. Il est appelé la superclasse staffmember et prenom, cordes lastname sont passés à travers elle.

package oopinheritance; 

public class Staffmember { 

private String firstName; 
private String lastName; 


// default constructor 
public Staffmember() { 
System.out.println("default constructor"); 
    } 

// constructor 
public Staffmember(String firstName, String lastName) { 
this.firstName = firstName; 
this.lastName = lastName; 

} 

public String getFirstName() { 
return firstName;} 

public void setFirstName(String firstName) { 
this.firstName = firstName; 
} 

public String getLastName() { 
return lastName;} 

public void setLastName(String lastName) { 
this.lastName = lastName;} 



public String toString() { 
return "Staffmember firstName=" 
+firstName+ ", lastName=" + lastName; 
} 
} 

Voici la classe Doctor, il est une sous-classe de staffmember et il a sa propre méthode toString:

package oopinheritance; 

public class Doctor extends Staffmember{ 
private int ward; 



public int getWard() { 
return ward; 
} 



public void setWard(int ward) { 
this.ward = ward; 
} 



public String toString() { 
return "Doctor firstName=" 
+this.getFirstName() + " , lastName=" + this.getLastName() + " \t   
ward"  + this.ward; 
} 



} 
+0

Vous n'avez pas montré le code qui imprime « constructeur par défaut » il est donc difficile de dire pourquoi on l'appelle et quand ... – assylias

+2

Impossible de dire avec votre code actuel, mais il est probable que le constructeur par défaut de la classe 'Doctor' produise' constructor par défaut' lorsqu'il est appelé. – Mena

+1

Parce que 'new Doctor()' appelle le constructeur no-arg? – Li357

Répondre

0

Comme vous ne l'avez pas montré l'ensemble de votre programme, il est donc difficile de dire où est l'erreur, mais il pourrait être dans le constructeur par défaut de la classe de médecin.

De toute façon, voici le code auquel vous pouvez vous référer. Cela donnera la bonne sortie.

Voici le lien que vous pouvez consulter pour voir l'ordre d'exécution http://javabeginnerstutorial.com/learn-by-example-3/order-of-execution-of-blocks-in-java/

Java Constructors - Order of execution in an inheritance hierarchy

class GfG { 
    public static void main(String[] args) { 

     Staffmember aStaffMember = new Staffmember("Steven", "bob"); 
     System.out.println(aStaffMember.toString()); 

     Programmer appleprg = new Programmer("Marion", "bob", "Java"); 
     appleprg.getLanguage(); 
     System.out.println(appleprg.toString()); 

     Doctor dr = new Doctor(); 
     dr.setWard(5); 
     dr.setFirstName("ed"); 
     dr.setLastName("fall"); 

     System.out.println(dr.toString()); 

    } 
} 

class Staffmember { 
    String firstName; 
    String lastname; 

    public Staffmember(String firstName, String lastname) { 
     super(); 
     this.firstName = firstName; 
     this.lastname = lastname; 
    } 

    @Override 
    public String toString() { 
     return "Staff Member firstName=" + firstName + ", lastname=" + lastname; 
    } 

} 

class Programmer { 
    String firstName; 
    String lastName; 
    String Language; 

    public String getLanguage() { 
     return Language; 
    } 

    public void setLanguage(String language) { 
     Language = language; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public Programmer(String firstName, String lastname, String Language) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastname; 
     this.Language = Language; 
    } 

    @Override 
    public String toString() { 
     return "Programmer firstName=" + firstName + ", lastName=" + lastName + ", Language=" + Language; 
    } 

} 

class Doctor { 
    int ward; 
    String firstName; 
    String lastName; 

    public void setWard(int ward) { 
     this.ward = ward; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public void setLastName(String lastname) { 
     this.lastName = lastname; 
    } 

    public Doctor(int ward, String firstName, String lastName) { 
     super(); 
     this.ward = ward; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    @Override 
    public String toString() { 
     return "Doctor ward=" + ward + ", firstName=" + firstName + ", lastName=" + lastName; 
    } 

} 
+0

Merci pour ça. J'essaie de tirer Doctor à travers la Superclasse Staffmember et d'ajouter "Ward" sur cela. Donc j'essaye de le faire sans créer un constructeur de Docteur. J'ai maintenant ajouté les autres classes afin que vous puissiez voir. – Bangorsteve

+0

Ceci est la ligne qui affiche le constructeur par défaut **** // constructeur par défaut public Staffmember() { System.out.println ("constructor par défaut"); } ****. Lorsque vous créez l'objet de la classe enfant, le constructeur par défaut de la classe parent est initialisé en premier, puis le constructeur de la classe enfant est initialisé. Donc, même si vous faites le constructeur de la classe de médecin, la classe parent, c'est-à-dire StaffMember counstructor, est appelée. Il suffit de voir ce lien, vous comprendrez https://stackoverflow.com/questions/19407187/java-constructors-order-of-execution-in-an-inheritance-hierarchy –

+0

OK, je peux voir le docteur appelle le constructeur par défaut pour Staffmember . Il semble appeler cela d'abord et ensuite faire la bonne chose dans la ligne suivante?:(:( – Bangorsteve