2 narcissussuisen narcissussuisen 于 2015.06.07 18:19 提问

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

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

12个回答

SuperStonne
SuperStonne   2015.06.07 18:50
已采纳

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

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

narcissussuisen
narcissussuisen 比如说Animal是父类,Dog是子类,那么我在Dog类里面又加上了Dog的无参构造函数public Dog(){}又是什么意思呢
接近 3 年之前 回复
narcissussuisen
narcissussuisen 追问一下。。
接近 3 年之前 回复
narcissussuisen
narcissussuisen 非常感谢~拜读ing
接近 3 年之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.06.07 18:41
 可以不加,默认会有这个构造函数。
narcissussuisen
narcissussuisen 好的~谢谢ww
接近 3 年之前 回复
91program
91program   Ds   Rxr 2015.06.07 18:41

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

narcissussuisen
narcissussuisen 嗯嗯,这一段代码是在子类继承父类中的一部分代码,其中子类的代码我没贴出来..谢谢www!
接近 3 年之前 回复
a858050760
a858050760   2015.06.07 19:08

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

narcissussuisen
narcissussuisen 好的ww~谢谢~
接近 3 年之前 回复
li5685918
li5685918   2015.06.07 20:09

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

narcissussuisen
narcissussuisen 之后我是想写一个子类的方法重写了cry方法的说。。。谢谢!!ww
接近 3 年之前 回复
jzvone
jzvone   2015.06.07 21:15

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

narcissussuisen
narcissussuisen 谢谢!ww
接近 3 年之前 回复
tongyi55555
tongyi55555   2015.06.07 22:19

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

narcissussuisen
narcissussuisen 嗯嗯!谢谢~
接近 3 年之前 回复
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.07 22:34

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

frank_20080215
frank_20080215   2015.06.08 06:16

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

u011845742
u011845742   2015.06.08 10:35

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

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!