构造器顿悟

    技术2022-05-11  60

    2007/3/1 星期四

      学习父类,子类 构造器有感,百尺竿头,又近了一步。:)     继承对面向对象的诠释可谓是淋漓尽致阿。它抽象了世界上有继承关系的事物。不如说人类。所以,下面就把小生对构造器的一点感悟与大家分享。

        1.子类继承了父类的一些东西(可能不是全部,比如说私有成员 private),但它

    总要继承一些东西的,或多或少。       这就好比人类中,父亲对财产的分配。每个子女都会从父亲那继承一些东西,有

    相同的 ,也有不同的。         2.要创建子类的构造器必须隐式(只能隐式的调用父类中的无参构造器)或显式的

    调用父类的构造器。而且在实例化子类对象时,也会首先实例化父类对象,如果继承的

    层次过多的话,无疑会造成效率的下降,因此,要谨慎使用继承。:)           这就好比人类中,没有父亲,哪会有儿子的存在。

    //example 1   隐式调用空参构造器

      public  class   Father{

    }     class    Son extends  Father{

    }

    //这样,不会出错,因为jvm在构造默认的子类构造器时会自动隐式调用父类默认的无参

    构造器。

    //example 2 父类重载默认的无参构造器,而且没有提供无参构造器

      public  class   Father{

        public  Father(String s){}

    }

      class   Son   extends   Father{}

    //这样会抱错,没有定义隐式的无参构造器。 因为父类重载了默认的无参构造器,而且

    又没有提供无参构造器,而隐式调用的只能是父类的无参构造器,所以会抱错。

      如果子类构造器的参数列表比父类构造器的参数列表少,而父类中又没有无参构造器

    ,则必须在子类的构造器中显式的调用父类提供的构造器,而多出的参数则要被声明为

    子类的静态成员变量。

    //example  3

        public  class   Father{

        public  Father(String s){}

    }

      class   Son   extends   Father{  //  声明构造器要用到的变量,必须为static                static   String  s;             public  Son(){                      super(s);             

                  }    } 


    最新回复(0)