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

一个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

    打赏 评论
  • danielinbiti 2015-06-07 10:41
     可以不加,默认会有这个构造函数。
    
    打赏 评论
  • 91program 2015-06-07 10:41

    声明一下构造函数是公有的,只有这些代码看不出用途。在有类继承它的时候,才有作用。

    打赏 评论
  • 如楼上所说,创建一个子类对象的实例的时候会先调用父类的无参构造函数,如果没有显示的生命的话,系统会默认生成一个。但是当父类中你声明了一个有参数的构造方法,系统就不会生成这个无参的构造方法,这样在子类继承后,穿件对象时就会因为找不到无参构造函数而报错。所以显示的声明无参构造函数是一个好习惯,尽管有时肯能没有什么卵用。求关注。

    打赏 评论
  • 为明天 2015-06-07 12:09

    这个叫无参构造函数。如果不写也没关系。系统会默认一个无参构造

    打赏 评论
  • jzvone 2015-06-07 13:15

    每个累都有默认一个没有参数的构造方法,就算你没有写,他其实也是存在的。

    打赏 评论
  • JonsonJiao 2015-06-07 14:19

    下次记得把有子类说清楚,这样就好解释了。
    单独的这个类是没有问题的,不谢无参数构造函数也没事,但是有了继承类,继承类创建实例的时候,因为需要调用父类的无参构造函数所以需要在父类里声明。
    看了你的评论,你的子类中应该是有这样一行的:
    Dog dog = new Dog();
    这个实例因为调用了Dog类的无参数构造函数,需要你声明无参数构造函数Dog,不加会报错,你的Dog类里应该没有有参数的Dog构造函数;
    同样,因为你使用了上面的代码,Dog继承了Animal,在构造实例的时候需要调用父类的无参构造函数,如果父类中没有显示声明,会报父类的错。

    打赏 评论
  • 另一花生 2015-06-07 14:34

    无参构造,可以不加,系统会自动配备,但是如果有有参构造函数了,就必须添加无参构造的,至于为啥,我还真是,,说不出来,,话说你知道么= =

    打赏 评论
  • frank_20080215 2015-06-07 22:16

    是构造函数,不加,也可以。那是用默认构造函数

    打赏 评论
  • 东东东雷 2015-06-08 02:35

    是无参构造器。
    public Animal( String param){ // 有参构造器 (带参数 param)
    ……
    }
    如果没有 有参构造器的话 ,有没有是一样的,会有无参构造器(默认);
    如果有 有参的构造器的话,如果没有写无参的构造器的话,就没有无参的构造器。(不再默认有无参的构造器)。

    打赏 评论
  • 超人汪小建(seaboat) 2015-06-09 04:49

    可以不加,根据自己需要,如有参数要实例化时传入怎写构造函数

    打赏 评论
  • 请叫我头头哥 2015-06-09 10:23

    默认的就有构造函数啊。

    打赏 评论

相关推荐 更多相似问题