Java 我的子类构造函数中的构造函数错误

Java 我的子类构造函数中的构造函数错误,java,constructor,subclass,Java,Constructor,Subclass,以下是作业: 使用以下准则设计和实现一个代表个人的类以及3个子类: a、 创建一个名为Person的类及其三个子类Employee、Student、Retired b、 此人有以下数据字段:姓名、出生年份、正在学习和已就业。它还提供了设置和获取每个字段值的方法,以及计算当前年龄和显示个人状态的方法。Person类中还包含一个将isStudying和isEmployed字段设置为false的构造函数。如果愿意,欢迎添加其他数据字段和方法 1.最后,创建一个Java测试类,该类使用Person类进行

以下是作业:

使用以下准则设计和实现一个代表个人的类以及3个子类:

a、 创建一个名为Person的类及其三个子类Employee、Student、Retired

b、 此人有以下数据字段:姓名、出生年份、正在学习和已就业。它还提供了设置和获取每个字段值的方法,以及计算当前年龄和显示个人状态的方法。Person类中还包含一个将isStudying和isEmployed字段设置为false的构造函数。如果愿意,欢迎添加其他数据字段和方法

1.最后,创建一个Java测试类,该类使用Person类进行模拟。在测试类中,您至少应该:a构造4个个人实例,b打印实例的名称,c根据实例的年龄、isStudying和isEmployed属性值打印实例的状态

public class Person2 {//begin class
    //declare variables
    String name;
    int year_of_birth;
    boolean isStudying;
    boolean isEmployed;
    int age;

public Person2(String name, int year_of_birth, boolean isEmployed, boolean isStudying, int age){//begin constructor
    this.name = name;
    this.year_of_birth = year_of_birth;
    this.isEmployed = false;
    this.isStudying = false;
    this.age = age;
}//end constructor

public int getYear(){//get year method
        return year_of_birth;
}//end method

public String getName(){//get name method
        return name;
}//end method

public boolean getEmployed(){//get employed method
        return isEmployed;
}//end method

public boolean getStudying(){//get employed method
        return isStudying;
    }//end method

public int getAge(){//get year method
        age = 2014 - year_of_birth;
    return age;
}//end method

public void setName(String name){//set name method
        this.name = name;
}//end method

public void setYear (int year){//set year method
        this.year_of_birth = year;
}//end method

public void setEmployed(boolean employed){//set employed method
        this.isEmployed = employed;
}//end method

public void setAge (int age){//set year method
        this.age = age;
}//end method

public static void main(String[] args) {
        // TODO code application logic here
}

}

class Student extends Person2 {//begin class

    public Student(String name, int year_of_birth, boolean isEmployed, boolean isStudying, int age){//begin constructor
        this.name = name;
        this.year_of_birth = year_of_birth;
        this.isEmployed = isEmployed;
        this.isStudying = isStudying;
        this.age = age;
}//end constructor)

    @Override
    public int getYear(){//get year method
        return year_of_birth;
    }//end method

    @Override
    public String getName(){//get name method
        return name;
    }//end method

    @Override
    public boolean getEmployed(){//get employed method
        return isEmployed = false;
    }//end method

    @Override
    public boolean getStudying(){//get employed method
        return isStudying = true;
    }//end method

    @Override
    public int getAge(){//get year method
    age = 2014 - year_of_birth;
    if (age > 30){
        System.out.println("Person is not a student");
    }
    return age;
}//end method

}

这段代码显然不完整,我被这个构造函数错误挂断了。它说实际参数和形式参数的长度不同。

在扩展任何功能时,您应该尝试使用该功能。。。 你们班的学生扩展了Person2,但它是否使用了Person2中的任何内容


为什么要覆盖所有方法并在子类中提供相同的功能???

在扩展任何功能时,您应该尝试使用该功能。。。 你们班的学生扩展了Person2,但它是否使用了Person2中的任何内容


为什么要重写所有方法并在子类中提供相同的功能???

问题在于您没有调用超级构造函数Person2。Student中的构造函数正在尝试调用默认构造函数,但没有Person2参数,Person2不存在

Person2中只有一个构造函数,应该从Student的构造函数调用该构造函数:

这也意味着您不需要重复所有初始化代码两次


你也不应该在学生中重复Person2中的所有方法。若你们把它们拿出来,那个么学生无论如何都会继承它们。这就是扩展类的首要目的。如果您不想要继承的行为,而是想要一些特定于学生的行为,则应该重写这样的方法。

您的问题是您没有调用超级构造函数Person2。Student中的构造函数正在尝试调用默认构造函数,但没有Person2参数,Person2不存在

Person2中只有一个构造函数,应该从Student的构造函数调用该构造函数:

这也意味着您不需要重复所有初始化代码两次


你也不应该在学生中重复Person2中的所有方法。若你们把它们拿出来,那个么学生无论如何都会继承它们。这就是扩展类的首要目的。如果您不想要继承的行为,而是想要一些特定于学生的行为,那么您应该重写这样的方法。

您能在哪里发布错误信息吗?另外,您似乎没有在Student中调用超级类构造函数?您可以在哪里发布错误消息吗?另外,您似乎没有在Student?中调用超类构造函数,默认情况下,Java尝试调用不存在的无参数构造函数。请参阅我对代码的编辑。如果答案是正确的,您能接受吗?默认情况下,Java会尝试调用不存在的无参数构造函数请参阅我对代码的编辑。如果答案是正确的,你能接受吗?我们正在本周的课堂上学习改写。从课程中的视频中可以看出,在使用子类中的模块时,您需要执行此操作。请再次观看视频-子类中可以使用来自super class的任何非私有功能。如果你正在改变行为,你只需要重写它。我们本周在课堂上正在努力重写它。从课程中的视频中可以看出,在使用子类中的模块时,您需要执行此操作。请再次观看视频-子类中可以使用来自super class的任何非私有功能。只有在改变行为时才需要覆盖它。
public Student(String name, int year_of_birth, boolean isEmployed, boolean isStudying, int age) {
    super(name, year_of_birth, isEmployed, isStudying, age);
}