gpt4 book ai didi

java - Java继承类中的构造函数可以为空吗

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:54 25 4
gpt4 key购买 nike

我在同一个项目中有 2 个类(DateStudent)。我需要测试 Student 类,但无法在静态方法中调用实例方法。我尝试通过在 public static void main(String[]args) 下添加 Student a = new Student() 来创建对该实例的引用,但这需要创建一个 public Student() 构造函数。但是,这会导致以下错误:

Implicit super constructor Date() is undefined. Must explicitly invoke another constructor

如果我将实例方法更改为静态方法,我就能解决这个问题。但想知道是否有其他方法可以在主方法中调用实例方法?

日期类:

public class Date {

int day;
int month;
int year;

public Date(int day, int month, int year) {
this.day=day;
this.month=month;
this.year=year;
}

public boolean equals(Date d) {
if(d.day==this.day&&d.month==this.month&&d.year==this.year)
{
return true;
}
else
{
return false;
}
}

public static boolean after(Date d1, Date d2) {
if(d1.day>d2.day&&d1.month>d2.month&&d1.year>d2.year)
{
return true;
}
else
{
return false;
}
}

}

学生类(class):

public class Student extends Date{

public String name;
public boolean gender;

public Student(String name, boolean gender, int day, int month, int year) {
super(day, month, year);
this.name=name;
this.gender=gender;
}

public Student() {

}

public boolean equals(Student s) {
Date d=new Date(s.day,s.month,s.year);
if(s.name==this.name&&s.gender==this.gender&&equals(d)==true)
{
return true;
}
else
{
return false;
}
}

public boolean oldGender(Student[]stds) {
Student old=stds[0];
Date oldDate = new Date(old.day,old.month,old.year);
for(int i=0;i<stds.length;i++)
{
Date d = new Date(stds[i].day,stds[i].month,stds[i].year);
if(after(oldDate,d)==false)
{
old=stds[i];
}
}
return old.gender;
}

public static void main(String[]args) {
Student s1=new Student("Jemima",true,2,3,1994);
Student s2=new Student("Theo",false,30,5,1994);
Student s3=new Student("Joanna",true,2,8,1995);
Student s4=new Student("Jonmo",false,24,8,1995);
Student s5=new Student("Qianhui",true,25,12,1994);
Student s6=new Student("Asaph",false,2,1,1995);
Student[]stds= {s1,s2,s3,s4,s5,s6};
Student a = new Student();
System.out.println(oldGender(stds));
}

}

最佳答案

当您扩展某个类时,您有义务使用 super(args) 构造调用该类的 1 个构造函数。新创建的类的构造函数可以是任何你喜欢的。

当扩展类没有带参数的构造函数时,则扩展类中可以省略构造函数定义。这听起来像是一个异常(exception),但事实上并非如此。编译器会为您动态添加空构造函数。

另一方面,当您显式定义空构造函数时(就像您所做的那样),您有义务在其中调用父类(super class)构造函数。

这正是错误所说的。

public Student() { 
//Here you need to call super(int day, int month, int year); as Date(int day, int month, int year)
}

或 delcare Date 类中没有参数构造函数

关于java - Java继承类中的构造函数可以为空吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50127748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com