我在一本介绍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 () ;       }}
运行这个程序,结果会报错.
    
    这两个说法是否正确?另外,假使正确的话,在子类中就只有自己写(而起必须写)构造函数了(因为按上述说法,子类中不会存在默认的构造函数)
    而实际运用中我觉得并不是如此

解决方案 »

  1.   

    因为 public Fruit(String color) 过载了 Fruit的默认的构造方法
    而子类中的构造方法默认调用父类中的构造方法
    如果Apple类中构造方法里没有显示的调用父类中被重载的构造方法
    则会报错
    因为找不到父类中的哪个默认的哪个构造方法
      

  2.   

    1.构造函数不能像其他超类的方法那样被继承。
    2.Java不会为子类创建不带参数的缺省构造函数
    这两个说法是对的
    只要把类Apple中加个无参构造函数就好了
    Apple(){}
    因为构造函数不能被子类继承所以有super这个东西而Java又不会为子类创建不带参数的缺省构造函数所以当不是从Object继承的子类
    是不会有默认构造函数的所以要Apple m = new Apple () ;这句话成立必须加个无参构造函数
      

  3.   

    楼上的我补充一下!
    加个无参构造函数函数是可以!但是你加的这个构造函数就不对了:Apple(){}
    当你在一个class中有有参构造函数后,系统是不会默认帮你加无参构造函数的。除非你自己加,
    当父类中没有无参构造函数时,子类中是不会自动调用父类中的构造函数的(原因很简单它不知调用那个),所以我们要ziji通过super()来显示调用。
    那么我们再来看看这个:
    class Fruit {    public Fruit ( String color ) {       System.out.print ( “color = ” + color ) ;    }
    中没有无参构造函数所以Apple(){}是不能编译的。
    解决方法一 在Fruit 中加个无参构造函数或者在Apple(){}该位
    Apple()
    {
    super(“color ”);
    }