2017-09-05 5 views
-6

ここは初心者です。プログラムはデフォルトコンストラクタを呼び出していますか?

私はこのコードがデフォルトの途中まで出力する理由を頭に浮かべます。誰か見ることができますか?

申し訳ありませんがフォーマットが間違っている場合は、最初に投稿し、正しくない場合は修正します。ここ

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()); 

    } 
} 

OUTPUT

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

申し訳ありませんが、みんなデフォルトコンストラクタがであるクラス。スーパークラスがStaffmemberとFIRSTNAMEと呼ばれるそれは、姓の文字列は、それを通過されています。ここで

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; 
} 
} 

は、それがStaffmemberのサブクラスである、ドクタークラスであり、それは、独自の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

を見るために参照できるリンクですwhen ... – assylias

+2

あなたの現在のコードでは言い表せませんが、 'Doctor'クラスのデフォルトのコンストラクタは、呼び出されたときに' default constructor'を出力する可能性があります。 – Mena

+1

'new Doctor()は引数なしのコンストラクタを呼び出すため? – Li357

答えて

0

そのここで言うのは難しいですこのエラーは、医師クラスのデフォルトのコンストラクタにある可能性があります。

ここでは、参照できるコードを示します。正しい出力が得られます。ここで

は、あなたがそれはそれはと呼ばれる理由を言うのは難しいですので、あなたは、「デフォルトのコンストラクタ」を出力するコードを示していない実行順序 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

ありがとうございます。私は、Staffmember Superclassを通してDoctorを引き出し、その上に "病棟"を追加しようとしています。だから私はDoctorコンストラクタを作成せずにそれをやろうとしています。私は今、他のクラスを追加しました。 – Bangorsteve

+0

これは、デフォルトコンストラクタを出力している行です。**** //デフォルトコンストラクタ public Staffmember(){ System.out.println( "default constructor"); } ****。子クラスのオブジェクトを作成するときに親クラスのデフォルトのコンストラクタが最初に初期化され、次に子クラスのコンストラクタが初期化されるようにします。したがって、たとえあなたが医者クラスのコンストラクタを親クラス、つまりStaffMemberカウンタートラクタが呼び出されたとしても。このリンクをご覧くださいhttps://stackoverflow.com/questions/19407187/java-constructors-order-of-execution-in-an-inheritance-hierarchy –

+0

私はDoctorがStaffmemberのデフォルトのコンストラクタを呼び出しているのがわかります。まずそれを呼んで、次の行に正しいことをしているようです。:(:( – Bangorsteve

関連する問題