【问题标题】:Constructor requiring more than one for subclass super构造函数需要多个子类 super
【发布时间】:2014-02-17 19:23:19
【问题描述】:

请帮我从这段代码中找出错误。我还是新手,我不知道这是否正确。 我确实有一个错误。 这是错误: 类 Person 中的构造函数 Person 不能应用于给定类型; 极好的(); ^ 必需:字符串,字符串,字符串 发现:没有参数 原因:实际参数列表和形式参数列表的长度不同 这是我的代码:

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 类都这样做。我只能有三个参数的构造函数。如何调用单参数构造函数? 例如,我有 公共学生(字符串名字,字符串姓氏,字符串middleInitial,字符串dateOfBirth){ 超级(名字,姓氏,中间名);和 公共学生(字符串街道名称,字符串状态,字符串国家){ 超级(街道名称,州,国家);

如何单独获取邮政编码?

【问题讨论】:

  • 查看学生班级。学生类的构造函数。
  • 那是一大堆与问题无关的代码。
  • 而且格式很糟糕。如果你想让人们阅读它,你应该花时间修复它......
  • 彻底阅读本文以了解 super() :) docs.oracle.com/javase/tutorial/java/IandI/super.html

标签: java inheritance constructor super


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个

    在学生班

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

    或者

    Person 类 中不创建 arg 构造函数。例如: public Person(){}

    【讨论】:

    • 我添加了无参数构造函数并得到了这个错误:错误:没有为 Person(String) super (zipcode) 找到合适的构造函数; ^ 构造函数 Person.Person(String,String,String) 不适用(实际参数列表和形式参数列表长度不同) 构造函数 Person.Person() 不适用(实际参数列表和形式参数列表长度不同)
    • 最好尝试创建 super(lastName, middleInitial,firstName);在学生课上作为我的答案
    【解决方案3】:

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

    【讨论】:

    • 如果我对 Person 和 Address 类都这样做。我只能有三个参数的构造函数。如何调用单参数构造函数?例如,我有 public Student (String firstName, String lastName, String middleInitial, String dateOfBirth) { super(firstName, lastName, middleInitial);和 public Student (String streetName, String state, String country) { super(streetName, state, country);如何单独获取邮政编码?
    • 你可以调用任何构造函数。你想做public Student(String name, String dateOfBirth) { super(name.split(" ")[0], "", name.split(" ")[1]); this.dateOfBirth = dateOfBirth; }之类的事情吗? (注意:我的代码很hacky,你应该将字符串解析分成更智能的方法)
    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 2014-04-23
    • 2015-01-27
    • 2013-10-25
    • 1970-01-01
    • 2021-05-25
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多