程序调用默认构造函数?

时间:2017-09-05 11:58:12

标签: java constructor default

初学者。

我无法理解为什么这段代码会在中途输出默认值。有人可以看看吗?

抱歉,如果格式错误,请第一次发布,如果不正确则会修复。

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

    }
}

输出

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

对不起这里的人是默认构造函数所在的类。它是名为Staffmember的超类,名字是字符串,字符串是通过它传递的。

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

这是Doctor类,它是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;
}



}

1 个答案:

答案 0 :(得分: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;
    }

}