类继承时构造方法的使用

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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值