构造器的继承

在java中,经常使用到继承,子类从父类中继承可继承的域和方法。而关于构造器的构造器却和一般的继承有很大不同。以下面为例。 
Java代码  收藏代码
  1. package Thinking;  
  2. public class Father{  
  3.     public int n;  
  4.       
  5.     public Father(int n){     
  6.         this.n=n;  
  7.     }  
  8.       
  9.     public Father(String msg){  
  10.         System.out.println(msg);  
  11.     }  
  12.   
  13. }  
  14. class Son extends Father{  
  15.     public Son(String msg){   //编译无法通过  
  16.         System.out.println(msg);  
  17.     }  
  18. }  

    上述代码中,Son是Father的子类,父类有两个构造函数,一个参数为int,一个参数为String,而Son的构造函数和父类第二个构造函数一样。然而Son却无法通过编译,这是因为子类的构造器重隐含着对父类无参构造器的调用,若父类没有无参构造器,那子类必须在构造器中显式调用父类的其中一个有参构造器,否则无法通过编译。 
    所以上述代码中,可以有两种解决办法。一是在父类添加一个无参构造器,二是在子类中添加一个对父类构造器的显示调用(super(param))。这样才可通过编译。 
    方法一: 
Java代码  收藏代码
  1. package Thinking;  
  2. public class Father{  
  3.     public int n;  
  4.       
  5.     public Father(){  
  6.         System.out.println("Father");  
  7.     }  
  8.     public Father(int n){     
  9.         this.n=n;  
  10.     }  
  11.       
  12.     public Father(String msg){  
  13.         System.out.println(msg);  
  14.     }  
  15.   
  16. }  
  17. class Son extends Father{  
  18.     public Son(String msg){  
  19.         System.out.println(msg);  
  20.     }  
  21. }    

方法二: 
Java代码  收藏代码
  1. package Thinking;  
  2. public class Father{  
  3.     public int n;  
  4.       
  5.       
  6.     public Father(int n){     
  7.         this.n=n;  
  8.     }  
  9.       
  10.     public Father(String msg){  
  11.         System.out.println(msg);  
  12.     }  
  13.   
  14. }  
  15. class Son extends Father{  
  16.     public Son(String msg){  
  17.         super(msg);  
  18.         System.out.println(msg);  
  19.     }  
  20. }  

    此外当父类没有无参构造器时,子类无法使用系统默认的构造器,必须创建自己的构造器,无论是否有参数。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值