2017-09-05 1 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가, LASTNAME 문자열이 통과라고합니다. 여기

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

실행 순서를보기 위해 참조 할 수있는 링크입니다 인쇄가 그것이라고 왜 말을 열심히 그래서 "기본 생성자" 언제 ... – 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

감사합니다. Doctor를 Staffmember Superclass를 통해 가져 와서 "병동"을 추가하려고합니다. 그래서 저는 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

확인 의사가 Staffmember의 기본 생성자를 호출하고있는 것을 볼 수 있습니다. . 먼저 전화를 걸고 다음 줄에서 올바른 것을하는 것 같습니다.:(:( – Bangorsteve

관련 문제