当前位置: 首页 > 面试题库 >

Java子类的构造函数

瞿博易
2023-03-14
问题内容

编译该程序时,出现错误-

 class Person {
    Person(int a) { }
 }
 class Employee extends Person {
    Employee(int b) { }
 }
 public class A1{
    public static void main(String[] args){ }
 }

错误-找不到构造函数Person()。为什么定义Person()是必要的?


问题答案:

创建时,Employee您要同时创建一个Person。为了确保Person构造正确,编译器super()Employee构造函数中添加了一个隐式调用:

 class Employee extends Person {
     Employee(int id) {
         super();          // implicitly added by the compiler.
     }
 }

由于Person没有无参数构造函数,因此失败。

您可以通过以下任一方式解决它

  • 添加对super的显式调用,如下所示:

     class Employee extends Person {
     Employee(int id) {
         super(id);
     }
    

    }

  • 或通过将no-arg构造函数添加Person

    class Person {
    Person() {
    }
    
    Person(int a) {
    }
    

    }

通常,编译器还会隐式添加无参数构造函数。正如Binyamin Sharet在评论中指出的那样,只有在根本不指定构造函数的情况下,情况才如此。在您的情况下,您
已经 指定了Person构造函数,因此不会创建任何隐式构造函数。



 类似资料:
  • 我有一个抽象的超类,它有一个形式的构造函数 并希望创建该抽象类的一个子类,该子类不是以字符串作为其第一个参数,而是采用一个表示给定字符串名称的整数值,例如,0代表某个字符串,1代表另一个字符串,依此类推。 当我尝试编写窗体子类(int number,int amount)的构造函数时,我得到一个格式为“Implicit super constructor is undefined.必须显式调用另一

  • 为什么在派生类构造函数中调用超类构造函数时id的值为0?当创建子对象时,什么时候在堆中为该对象分配内存?在基类构造函数运行之后还是之前?

  • 问题内容: 我正在尝试创建一个将字段作为参数的构造函数,然后将其放入存储在超类中的字段中。这是我正在使用的代码 在超类中,我用 我有一个访问器方法 我收到一个错误“ 味道在超类中具有私有访问权 ”,但是我认为这无关紧要,因为我正在调用将其返回到字段的访问器方法? 问题答案: 您应该做什么: 在您的超类中添加一个构造函数: 在Crisps类中: 注释 对您的问题的一些评论: “在超类中,我已经用”

  • 我在Java有一个简单的亲子实现。父类看起来像: 和子类类似于: 当我打电话的时候 我希望BasePage构造函数也能运行并设置配置数据。但BasePage构造函数根本不运行。我不明白为什么。有人能告诉我为什么吗?谢谢.

  • 问题内容: 我有一个“ ChildClass”类,它扩展了“ ParentClass”类。我不想完全替换父类的构造函数,而是要先调用父类的构造函数,然后再做一些额外的工作。 我相信默认情况下会调用父类的0参数构造函数。这不是我想要的 我需要用参数调用构造函数。这可能吗? 我试过了 但这不起作用,因为您无法修改“ this”。 问题答案: 您可以从子代的构造函数中以“ super”引用父代的构造函数

  • 问题内容: 我有两个类,和,扩展了前一个类。 具有以下构造函数: 我将注意到所有实例变量都已设置为private。 同时,具有以下构造函数: 但是,这为我的构造函数引发了“找不到符号”错误。 我尝试使用,但是我的超类的私有范围阻止了这种情况。 我发现向我的构造函数中添加字段并允许我调用超级构造函数,但是我想知道是否存在一种无需在子类构造函数中传递其所有参数的情况下调用超级构造函数的方法? 问题答案