MMC
MMC

Reputation: 175

Constructor requiring more than one for subclass super

Please help me find errors from this code. I'm still new and I don't know if this is correct or not. I do have one error. This is the error: constructor Person in class Person cannot be applied to given types; super(); ^ required: String,String,String found: no arguments reason: actual and formal argument lists differ in length This is my code:

import java.util.*;

    public class Person {

        //Data fields
        private String lastName; 
        private String middleInitial;
        private String firstName;

        //Constructors
        public Person(String lastName, String middleInitial, String firstName) {
            this.lastName = lastName;
            this.middleInitial = middleInitial;
            this.lastName = lastName;
        }

        //Accessor methods
        public String getlastName() {
        return lastName;
        }

        public String getmiddleInitial() {
            return middleInitial;
        }

        public String getfirstName() {
            return firstName;
        }

        //Mutator methods

        public void setlastName(String lastName) {
            lastName = lastName;
        }

        public void setmiddleInitial(String middleInitial) {
            middleInitial = middleInitial;
        }

        public void setfirstName(String firstName) {
        firstName = firstName;
        }

        public String getName() {
            String studentName = this.lastName + ", " + this.firstName +
                this.middleInitial + ".";
            return studentName;
        }
    } //end Person class

    class Address {

        //Data fields

        private String streetName; 
        private int zipCode;
        private String state;
        private String country;

        //Constructors

        public Address(String streetName, int zipCode, String state, 
            String country) {
            this.streetName = streetName;
            this.zipCode = zipCode;
            this.state = state;
            this.country = country;
        }

        //Accessor methods

        public String getstreetName() {
            return streetName;
        }

        public int getzipCode() {
            return zipCode;
        }

        public String getstate() {
            return state;
        }

        public String getcountry() {
            return country;
        }

        //Mutator methods

        public void setstreetName(String streetName) {
            streetName = streetName;
        }

        public void setzipCode(int zipCode) {
            zipCode = zipCode;
            //Integer.toString(zipCode);
        }

        public void setstate(String state) {
            state = state;
        }

        public void setcountry(String country) {
            country = country;
        }

        public String getAddress() {
            String studentAddress = streetName + "\n" + state + ", " + country + 
                "\n" + zipCode;
            return studentAddress;
        }
    } //end Address class

    class Student extends Person { 
        private String dateOfBirth;

        //Constructors

        public Student (String studentName, String dateOfBirth) {
            super();
            dateOfBirth = dateOfBirth;
        }

        //Accessor methods

        public String getdateOfBirth() {
            return dateOfBirth;
        }

        //Mutator methods

        public void setdateOfBirth() {
            this.dateOfBirth = dateOfBirth;
        }

        public String toString() {
            return ("Date of Birth: " + dateOfBirth);
        }
    } //end Student subclass

Edited: If I do so for both the Person and Address class. I can only have three-arg constructors. How can I call a one-arg constructor? For example, I have public Student (String firstName, String lastName, String middleInitial, String dateOfBirth) { super(firstName, lastName, middleInitial); and public Student (String streetName, String state, String country) { super(streetName, state, country);

How can I get zipcode separately?

Upvotes: 0

Views: 343

Answers (3)

brain
brain

Reputation: 17

Person Class has a constructor with arguments. So default constructor will not be created. So you have to pass 3 String parameters in super(3 String parameters) or you have to create a constructor which does not take any parameter in person class.

Upvotes: 0

gjman2
gjman2

Reputation: 920

Try this

In student class

 public Student ( String lastName, String middleInitial, String firstName,String studentName, String dateOfBirth) {
    super( lastName, middleInitial,firstName);
    this.dateOfBirth = dateOfBirth;
}

Or

In Person class create no arg consructor. Eg: public Person(){}

Upvotes: 1

Paul Hicks
Paul Hicks

Reputation: 13999

Class Person has a constructor, therefore the default no-arg constructor is not created for you. Therefore you can't call super() in Student's constructor, you have to call super(lastName, middleInitial, firstName);. Or you could create a new Person no-arg constuctor.

Upvotes: 1

Related Questions