1

这是我的父类

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)
    {

    }

}

个人构造函数不必与父类相同,但无论我做什么,它都会出错。

我将添加 final regnumberpersonel,它不能更改,但我不能添加这个。

为什么我不能这样做:

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();

我现在能做什么?它不接受。

人类human1=新人类();我必须放入括号,但我想从用户那里获取,但我在构造函数中定义了 3 个参数,所以在上课之前我应该​​这样做吗?

4

6 回答 6

2

您需要将Personel构造函数链接到超类构造函数,例如

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}

这里的super调用是构造函数链接。您不必使用与声明的构造函数中相同的参数 - 但您确实需要直接或通过同一类中的另一个构造函数链接到超类构造函数。例如,尚不清楚在您的最后一种情况下超类构造函数参数是什么regnum(由于某种原因,它甚至没有类型......)

于 2013-07-16T10:34:33.693 回答
1

因为您错过了调用超类构造函数:

public Personel(String name,String surname, int idno)
{
   super(name,surname,idno);
}
于 2013-07-16T10:35:28.577 回答
1

你(们)能做到:

public Personel() {
     super("","",-1);
     ...
}
于 2013-07-16T10:36:04.310 回答
1

请添加以下带有显式超级调用的构造函数,以调用具有String, String, int参数的超级类构造函数。

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}
于 2013-07-16T10:36:51.697 回答
0

根据 Oracle 文档http://goo.gl/S8B3A “如果构造函数没有显式调用超类构造函数,Java 编译器会自动插入对超类的无参数构造函数的调用。如果超类没有 no -argument 构造函数,你会得到一个编译时错误。Object 确实有这样的构造函数,所以如果 Object 是唯一的超类,没有问题。”

所以你必须打电话:

  super(name, surname, idno);

在你的

 public Personel(String name,String surname, int idno)
于 2013-07-16T11:04:51.730 回答
0

参见 JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9

如果隐式声明了默认构造函数但超类没有可访问的构造函数(第 6.6 节),该构造函数不接受任何参数并且没有 throws 子句,则这是编译时错误。

因此,您要么在抽象类中声明没有 throws 子句的参数构造函数。

 public abstract class Human {
    public Human(){
    }
  }

或者从你的类中调用抽象类构造函数

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}
于 2013-07-16T10:40:49.923 回答