Search code examples
javaconstructordefault

program calling default constructor?


Beginner here.

I cant get my head around why this code outputs the default halfway through. Can anyone take look?

sorry if the format is wrong, first time posting and will fix if not 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());

    }
}

OUTPUT

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

Sorry guys here the class the default constructor is in. It is the Superclass called Staffmember and the firstname, lastname Strings are passed through it.

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

Here is the Doctor class, it is a subclass of Staffmember and it has its own tostring method:

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



}

Solution

  • As you have not shown your whole program, so its hard to tell where is the error, but it might be in the default constructor of the doctor class.

    Anyways here is the code that you can refer. It will give the correct output.

    Here is the link you can refer to see the execution order 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;
        }
    
    }