我在一本介绍java基础的书上看到这样的描述----
1.构造函数不能像其他超类的方法那样被继承。
2.Java不会为子类创建不带参数的缺省构造函数
这个描述很多人说是正确的,但我有点想不明白   请问,既然子类不继承父类的构造函数,而java又不为子类创建
默认的构造函数
   而作为一个类,构造函数是必不可少的,根据以上论点
那在子类中我们就必须为其自己写一个类了,哪怕是没有参数和方法体的构造函数.但事实上并非如此:
class Fruit {
    public Fruit(){}    public Fruit ( String color ) {       System.out.print ( "color = " + color ) ;    }}class Apple extends Fruit {    public static void main ( String [ ] args ) {       Apple m = new Apple () ;       }}
以上程序虽然子类apple中没有构造函数(因为如1.2中所述,既不继承也不创建默认的),这个程序能通过编译,是正确的.
为何?请大虾们指教,我觉得有些矛盾

解决方案 »

  1.   

    2.Java不会为子类创建不带参数的缺省构造函数
       默认有个不带参数的构造函数,但是,如果用户自己定义了其它构造函数(不管带不带参数),就不再有这个缺省构造函数,如下例1.构造函数不能像其他超类的方法那样被继承。
       确实不像继承:子类会默认调用父类的无参构造函数,如果没有,会报错,如:
     class Fruit {
        //public Fruit(){}********************
        public Fruit ( String color ) {
           System.out.print ( "color = " + color ) ;
        }
    }class Apple extends Fruit {
       /*********************
       public Apple (){super("Color.Red");}
       ***********************/
        public static void main ( String [ ] args ) {
           Apple m = new Apple () ;
           }
    }
    改正:1)自己定义一个无参构造函数
       2)显示调用有参构造函数,即加上上例的/*****/部分
      

  2.   

    Apple m = new Apple () ;
                 -----------
    是class Apple自身的构造函数,而不是从父类class Fruit的继承来的。
    “Java不会为子类创建不带参数的缺省构造函数”强调的是父子类之间的关系,是不为子类创建父类的缺省构造函数Fruit()而非自身的Apple () 。
    个人理解,有错误大家指教.......