当前页面: 开发资料首页 → J2SE 专题 → 关于java构造函数中的一点疑问?????
关于java构造函数中的一点疑问?????
摘要: 关于java构造函数中的一点疑问?????
我在一本介绍java基础的书上看到这样的描述----
1.构造函数不能像其他超类的方法那样被继承。
2.Java不会为子类创建不带参数的缺省构造函数
如:
class Fruit {
public Fruit ( String color ) {
System.out.print ( “color = ” + color ) ;
}
}
class Apple extends Fruit {
public static void main ( String [ ] args ) {
Apple m = new Apple () ;
}
}
运行这个程序,结果会报错.
这两个说法是否正确?另外,假使正确的话,在子类中就只有自己写(而起必须写)构造函数了(因为按上述说法,子类中不会存在默认的构造函数)
而实际运用中我觉得并不是如此
任何书都会说到,类有了构造器就不会创建默认构造起了
因为 public Fruit(String color) 过载了 Fruit的默认的构造方法
而子类中的构造方法默认调用父类中的构造方法
如果Apple类中构造方法里没有显示的调用父类中被重载的构造方法
则会报错
因为找不到父类中的哪个默认的哪个构造方法
学习,谁有更详细的解释?
1.构造函数不能像其他超类的方法那样被继承。
2.Java不会为子类创建不带参数的缺省构造函数
这两个说法是对的
只要把类Apple中加个无参构造函数就好了
Apple(){}
因为构造函数不能被子类继承所以有super这个东西
而Java又不会为子类创建不带参数的缺省构造函数所以当不是从Object继承的子类
是不会有默认构造函数的
所以要Apple m = new Apple () ;这句话成立必须加个无参构造函数
楼上的我补充一下!
加个无参构造函数函数是可以!但是你加的这个构造函数就不对了:Apple(){}
当你在一个class中有有参构造函数后,系统是不会默认帮你加无参构造函数的。除非你自己加,
当父类中没有无参构造函数时,子类中是不会自动调用父类中的构造函数的(原因很简单它不知调用那个),所以我们要ziji通过super()来显示调用。
那么我们再来看看这个:
class Fruit {
public Fruit ( String color ) {
System.out.print ( “color = ” + color ) ;
}
中没有无参构造函数所以Apple(){}是不能编译的。
解决方法一 在Fruit 中加个无参构造函数或者在Apple(){}该位
Apple()
{
super(“color ”);
}
up