`

类继承时构造方法的使用

阅读更多

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

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(参数),这两个对构造方法的调用语句必须放在构造方法中,而且是第一句

1
2
分享到:
评论
1 楼 在下个路口 2013-07-05  
写的代码有点乱似的。

相关推荐

Global site tag (gtag.js) - Google Analytics