Java继承中的构造器实现

来源:互联网 发布:淘宝卖家交流群 编辑:程序博客网 时间:2024/06/06 06:40


首先要说明的是,子类构造器执行时一定会先隐式或显式地调用父类的某一构造器。以下分情况进行说明。

  • 父类没有显式定义构造器,子类也没有显式定义构造器,或者显式定义了构造器,但是在定义的构造器中没有显式调用父类构造器,则在执行子类构造器代码时(也就是初始化的时候),会在第一行最先隐式地调用父类默认构造器,然后执行子类构造器代码。  


  • 父类没有显式定义构造器,子类显式定义了构造器,并且在子类构造器代码中显式地调用了父类默认构造器(无参)时,则只能在第一行进行调用(即为最先执行的代码),否则会有错误提示(Constructor call must be the first statement in a constructor)。因为如果不是在第一行显式调用父类构默认造器而是在后面调用,一进入子类构造器方法体则会调用一次父类默认构造器,等到执行到后面显式调用父类默认构造器的代码处时,就会发生重复两次调用同一个构造器这样的恶劣情况,为了避免,所以若要在子类构造器中显式调用父类构造器,则必须在第一行声明。同理,若要在构造器中显式调用本类其他构造器时,为了防止发生同样的错误,也必须在第一行声明。 
                       
  • 父类显式定义了无参构造器,子类构造器无需做出相应改变,因为该无参构造器就是父类默认构造器。 
             
  • 父类显式定义了有参构造器(没有定义无参构造器),子类构造器则必须显式调用父类已经定义的构造器之一,否则会有错误,因为父类已经没有默认无参构造器存在了。
                                

0 0