构造函数需要多个子类super

时间:2014-01-27 03:42:19

标签: java inheritance constructor super

请帮我查找此代码中的错误。我还是新人,我不知道这是否正确。 我确实有一个错误。 这是错误:  构造函数类Person中的Person不能应用于给定的类型;         超();         ^   required:String,String,String   发现:没有争论   原因:实际和正式的参数列表长度不同 这是我的代码:

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

编辑:如果我同时为Person和Address类这样做。我只能有三个arg构造函数。如何调用one-arg构造函数? 例如,我有 public Student(String firstName,String lastName,String middleInitial,String dateOfBirth){      super(firstName,lastName,middleInitial);和 public Student(String streetName,String state,String country){      超级(街道名称,州,国家);

如何单独获取邮政编码?

3 个答案:

答案 0 :(得分:1)

Person有一个构造函数,因此不会为您创建默认的无参数构造函数。因此,您无法在super()的构造函数中调用Student,您必须致电super(lastName, middleInitial, firstName);。 或者您可以创建一个新的Person无参数构造函数。

答案 1 :(得分:1)

试试这个

在学生班上

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

Person class 中,不创建arg consructor。例如: 公共人员(){}

答案 2 :(得分:0)

Person Class有一个带参数的构造函数。因此不会创建默认构造函数。所以你必须在super(3个String参数)中传递3个String参数,或者你必须创建一个不在person类中使用任何参数的构造函数。