站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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


↑返回目录
前一篇: 关于子类中构造函数的一点疑问???
后一篇: 使用List.add(Object)的时候,为什么总是有警告?