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初学者对目前自己写程序的一点小的总结,希望大家能多多给点意见,参与讨论!
posted @ 2016-03-23 14:01  蓝色夜晚的记忆  阅读(6731)  评论(0编辑  收藏  举报