narcissussuisen 2015-06-07 10:19 采纳率: 100%
浏览 2364
已采纳

一个JAVA苦手的关于类的问题

public class Animal{
public Animal(){
}
public void cry(){
System.out.print("crying");
}
}
其中为什么还要再加上public Animal(){ }这一行代码?

  • 写回答

12条回答 默认 最新

  • SuperStonne 2015-06-07 10:50
    关注

    创建一个子类对象的实例的时候,必先调用父类的无参构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统不会给他创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器会报错,如果在子类的构造函数中指定使用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数的时候,就不会报错了。

    我们假设A是B的父类,B是A的子类。
    1、如果没有给A类没有提供构造函数,则编译器会自动提供一个默认的构造函数,如果用户提供了自己的构造函数,则编译器不提供默认的构造函数。
    2、子类B实例化时会自动调用父类的构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供其他的构造函数,编译器同样报错,因为找不到A的默认无参数构造函数。所以我们编程中最好给一个默认的构造函数。
    3、或者在B的构造函数中显示的调用父类A的有参构造函数。super(parameter

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记