这是我的父类
public abstract class Human {
public Human(String name,String surname, int idno){
}
}
这是子类
public class Personel extends Human {
public Personel(String name,String surname, int idno)
{
}
}
personels构造函数不必与父类相同,但无论我做什么,都会产生错误。
我会补充一下
final regnumber
到personel
,它无法更改,但我无法添加此内容。
为什么我不能这样做:
public Personel()
{todo
}
或
public Personel();
或
public Personel(String name,String surname, int idno,int asda, string asdsa)
{
}
或
public Personel(final regnum)
{
}
如果你有帮助,我会很高兴。
我做到了,谢谢,但现在我想从用户那里获取输入,而不是像例如human1对象。
我有一个主类,我想创建一个对象Human human1 = new human();
我现在能做什么?它不接受。
Human human1 = new human();我必须放入parantheses但我想从用户那里拿走,但是我在构造函数3参数中定义了所以,在课前我应该这样做吗?
答案 0 :(得分:2)
您需要将Personel
构造函数链设置为超类构造函数,例如
public Personel(String name, String surname, int idno) {
super(name, surname, idno);
}
这里super
调用是构造函数链接。您不必使用与声明的构造函数中相同的参数 - 但您需要直接或通过同一类中的另一个构造函数链接到超类构造函数。例如,不清楚超级构造函数参数在regnum
的最后一种情况下是什么(由于某种原因,它甚至没有类型......)
答案 1 :(得分:1)
因为您错过了调用超类构造函数:
public Personel(String name,String surname, int idno)
{
super(name,surname,idno);
}
答案 2 :(得分:1)
你可以:
public Personel() {
super("","",-1);
...
}
答案 3 :(得分:1)
请使用显式超级调用添加以下构造函数,以调用具有String, String, int
参数的超类构造函数。
public Personel(String name, String surname, int idno) {
super(name, surname, idno);
}
答案 4 :(得分:0)
请参阅JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9
如果隐式声明默认构造函数,则是编译时错误 但是超类没有可访问的构造函数(第6.6节) 参数并且没有抛出条款。
所以要么声明没有参数构造函数,它在抽象类中没有throws子句。
public abstract class Human {
public Human(){
}
}
或从您的类
调用抽象类构造函数public Personel(String name, String surname, int idno) {
super(name, surname, idno);
}
答案 5 :(得分:0)
每个Oracle文档http://goo.gl/S8B3A “如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参构造函数,则会出现编译时错误。对象确实有这样的构造函数,所以如果Object是唯一的超类,就没有问题。“
所以你必须打电话:
super(name, surname, idno);
中的
public Personel(String name,String surname, int idno)