Java基础-类构造器继承
Java基础-类构造器继承
陶邦仁 发表于5年前
Java基础-类构造器继承
  • 发表于 5年前
  • 阅读 405
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

在Java中,经常使用到继承,子类从父类中可继承的域和方法。而关于构造器的构造器却和一般的继承有很大不同。以下面代码为例:

package Thinking; 
public class Father{ 
      public int n; 

      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){   //编译无法通过 隐含调用父类无参构造器
            System.out.println(msg); 
      } 
}

上述代码中,Son是Father的子类,父类有两个构造函数,一个参数为int,一个参数为String,而Son的构造函数和父类第二个构造函数一样。然而Son却无法通过编译,这是因为子类的构造器中隐含着对父类无参构造器的调用,若父类没有无参构造器,那子类必须在构造器中显式调用父类的其中一个有参构造器,否则无法通过编译

所以上述代码中,可以有两种解决办法。一是在父类添加一个无参构造器,二是在子类中添加一个对父类构造器的显示调用(super(param))。这样才可通过编译。

方法一:

package Thinking; 
public class Father{ 
      public int n; 

      public Father(){ 
            System.out.println("Father"); 
      } 
      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){ 
            System.out.println(msg); 
      } 
}

方法二:

package Thinking; 
public class Father{ 
      public int n; 


      public Father(int n){    
            this.n=n; 
      } 

      public Father(String msg){ 
            System.out.println(msg); 
      } 

} 
class Son extends Father{ 
      public Son(String msg){ 
            super(msg); 
            System.out.println(msg); 
      } 
}

换句话说,当父类没有无参构造器时,子类无法使用系统默认的构造器,必须创建自己的构造器,无论是否有参数,同时要在子类构造函数中第一句调用父类的构造函数。

标签: java 构造器 继承
共有 人打赏支持
粉丝 1468
博文 388
码字总数 1483822
×
陶邦仁
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: