继承忽略默认构造函数并在Java中使用带参数的构造函数
我在Java方面不是很全面,这就是为什么我问这个听起来可能很愚蠢的问题。尽管如此,我还是试图弄清楚如何忽略类的默认构造方法,而使用带参数的构造方法。例如,类似这样的内容:
public class Name {
String firstName, lastName;
public Name()
{
String dialog = JOptionPane.showInputDialog("First and Last name: ");
Scanner inName = new Scanner(dialog);
firstName = inName.next();
lastName = inName.nextLine();
}
public Name(String newFirst, String newLast)
{
firstName = newFirst;
lastName = newLast;
}
}
然后我有一个名为Student的类,它扩展了名称:
public class Student extends Name
{
public Student(String firstName, String lastName)
{
firstName = firstName;
lastName = lastName;
}
}
因此,Name类中的第一个construct方法会提示用户输入他们的名称,但假设我已经知道用户名并将其存储在一些变量中,那么如何在不调用第一个默认构造函数的情况下创建新的Student()对象(实际上是Name()对象),并将其作为默认构造函数调用:
Student student1 = new Student(firstName, lastName);
我理解为什么下面这行会调用默认的构造方法:
Student student1 = new Student();
但下一行stil调用相同的无参数构造方法,即使我使用的是参数:
Student student1 = new Student(firstName, lastName);
我做错了什么
# 1 楼答案
第一:在构造函数中使用扫描仪从外部世界获取输入是一个糟糕的想法
第二:Student中的构造函数调用Name中的构造函数,该构造函数不带任何参数,因为没有显式调用super()。如果要避免这种情况,请执行以下操作:
如果不从子类显式调用超级构造函数,它将隐式调用不带参数的超级构造函数
更清楚地说,当你写的时候
你实际上在做: