动手实验:继承条件下的构造方法调用

package test2;


class Grandparent 
{


    public Grandparent()
 	{

        	System.out.println("GrandParent Created.");
	
}


    public Grandparent(String string) 
	{

        	System.out.println("GrandParent Created.String:" + string);
	
 }

}



class Parent extends Grandparent
{


    public Parent()
	 {

        	//super("Hello.Grandparent.");

        	System.out.println("Parent Created");
	
       // super("Hello.Grandparent.");

	  }

}



class Child extends Parent 
{


    public Child()
	 {
	
        System.out.println("Child Created");

	  }

}



public class TestInherits 
{


    public static void main(String args[])
	 {

        	Child c = new Child();
	
  }

}

  

结果:

GrandParent Created.
Parent Created
Child Created

 

打开下面第一句的代码,

super("Hello.Grandparent.");

  

结果:

GrandParent Created.String:Hello.Grandparent.
Parent Created
Child Created

  

打开第二句代码,结果报错,Constructor call must be the first statement in a constructor

 

原因分析:

子类创建对象,调用构造方法时,首先如果未显式写出,则会默认调用父类的无参构造,如果显式的写出使用super调用父类的构造方法,注意:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句,编译器会先进行对于父类构造方法的调用,如果不是第一条语句,则不符合。

 

posted @ 2022-10-10 17:46  ashuai~  阅读(39)  评论(0)    收藏  举报