欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

类继承时构造方法的使用

程序员文章站 2022-05-14 12:01:44
...

第一 所有的类都有构造方法

1如果程序员没有给类显式的定义构造方法,则系统默认为该类定义一个默认的无参构造方法。

2如果程序员定义的类中有若干有参构造方法,则系统不再为该类定义无参构造方法。

第二 子类不能继承父类的构造方法

第三 子类在创建时,必须默认、直接或间接的调用父类的构造方法,以使父类内容先于子类创建和初始化

1如果父类未定义任何构造方法(系统会定义一个默认的无参构造方法)或者定义的构造方法中有一个是无参构造方法,则对子类构造方法没有影响。因为创建子类时会默认调用父类的无参构造方法。

例如:

public class ExtendsTest {
   public static void main(String[] args) {
      new Child1();
      new Child2();
   }
}
 
//父类中没有构造方法
class Parent{
   String name;
   public void setName(String name){
      this.name = name;
   }
   public void print(){
      System.out.println("name=="+name);
   }
}
 
class Child1 extends Parent{
   Child1(){
      //子类默认调用父类的无参构造方法
   }
}
class Child2 extends Parent{
   Child2(){
      super();//子类显示调用父类的构造方法
   }
}

 

2如果父类定义有若干有参构造方法,但没有定义无参构造方法则,子类构造方法中必须使用“super(参数)”的形式,直接调用父类构造方法;或者,在子类构造方法中调用“this(参数)”的形式间接调用父类构造方法

例如:

public class ExtendsTest {
   public static void main(String[] args) {
      new Child();
      new Child("李四");
   }
}
 
//父类中没有无参构造方法,只有若干有参构造方法
class Parent{
   Parent(String name){
     
   }
   Parent(String name,int age){
     
   }
}
 
class Child extends Parent{
   //构造方法1
   Child(String name){
//    super();这是错误的,因为父类没有无参构造方法
      super(name,30);//直接调用父类的有参构造方法
   }
  
   //构造方法2
   Child(){
      this("张三");//间接调用父类的构造方法,因为“构造方法1”中有对父类构造方法的调用
   }
}

 

注意:this(参数)或者super(参数),这两个对构造方法的调用语句必须放在构造方法中,而且是第一句