java中只要调用子类的构造函数就要调用父类无参数的构造函数吗?若父类中不存在无参数构造函数会出错吗?


在回答这个问题之前,我们可以先来看下面一段代码(父类里面有参数的构造方法方法体省略):

class Pen {
      public Pen(){}
      public Pen(String newColor , double newLength , double newPrice ){
       .............................;
       .............................;
     }
}
class Pencile extends Pen{
    public   static int count =0;
     public Pencile(){
       count ++;
     }
     public int GetCount(){
      return count ;
     }
public class Test {
      public static void main(String[] args ){
      Pencile A = new Pencile();
      Pencile B = new Pencile();
      System. out .println( "共创建了" + A .GetCount()+ "个实例!" );
  }
}
       这段代码的结果应该是:共创建了2个实例!,这个结果是不难想象的,但是如果这段代码我们把“public Pen(){}”这段无参的构造函数注释掉的话,那么这个程序就会出现问题了。但是如果我们不但注释掉“public Pen(){}”,同样的我们也注释掉“ public Pen(String newColor,  double newLength,  double newPrice){}”这样的有参数的构造函数,那么这个程序又能执行了,而且输出同样的结果。为什么会出现这样的问题呢?这就自然引出了我们以下的这个问题:
      java 中只要调用子类的构造函数就要调用父类无参数的构造函数吗?若父类中不存在无参数构造函数会出错吗?
    答:Java中只要调用子类的构造函数就一定会调用父类的构造函数,这是毋庸置疑的!有时我们并没有在父类中写有参和无参的构造方法,但是这样我们在定义子类对象时调用子类构造函数时,其实也调用父类的构造函数,这是系统自动为我们添加的“public Pen(){}”。但是如果我们在父类中已经自己定义了有参的构造方法,却没有定义无参的构造方法,那么此时系统是不会为我们自动添加无参的构造方法的,此时程序结果就会提醒你父类没有无参的构造方法,程序就会报错。
      以上是一个java初学者对目前自己写程序的一点小的总结,希望大家能多多给点意见,参与讨论!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM