构造方法中super()的作用


复习:名称

Java继承,子类实例化时,调用父类的无参构造方法

https://blog.csdn.net/Peng_Hong_fu/article/details/52862300

在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句
如下面代码:

class Extends_Demo {    

	public static void main(String[] args) {        

	Cat c = new Cat();            *//---------------(1)*        

	System.out.println("-------------------");        

	Cat c1 = new Cat("花花",4);   *//----------------(2)*    

	} 
}


class Animal {    

	private String color;    

	private int foot;     

		public Animal(){        

		System.out.println("我是父类无参数构造器"); 
        
		}     

	public Animal(String color,int foot){        

		System.out.println("我是父类有参数构造器");        

		this.color = color;        

		this.foot  = foot; 

   } 

} 


class Cat extends Animal{     

	public Cat(){        

		super();                     *//---------------可以省略*        

		System.out.println("我是子类无参数构造器");

    }     

	public Cat(String color,int foot){                      

	*//super(color,foot);         //---------------(3)*        

		super();                     *//---------------可以省略*        

		System.out.println("我是子类有参数构造器");
 	 } 
}

输出结果如下:

我是父类无参数构造器
我是子类无参数构造器
-----------------
我是父类无参数构造器
我是子类有参数构造器
    
请按任意键继续...

main方法中
(1)语句执行的是子类的无参数构造方法,内部默认有super(),代表执行父类无参数构造方法,因此输出父类无参数构造方法中的语句和子类无参数构造方法中的语句;

(2)语句执行的是子类有参数构造方法,内部也是默认有super(),代表执行父类无参数构造方法,输出语句是父类无参数构造方法中的语句和子类有参数构造方法中的语句;

若将(3)语句解除屏蔽,则子类有参构造方法中执行super(color,foot)表示执行父类有参构造方法Animal(color,foot),修改后子类:

class Cat extends Animal{     
    public Cat(){        
        super();                    *//----------------可以省略*        
        System.out.println("我是子类无参数构造器");    
    }     
    
    public Cat(String color,int foot){                      
        super(color,foot);         *//---------------(3)*        
            *//super();*        
        System.out.println("我是子类有参数构造器");    
    } 
}

输出:

我是父类无参数构造器
我是子类无参数构造器
-----------------
我是父类有参数构造器
我是子类有参数构造器

请按任意键继续...

对比后可以知道,super()代表执行父类无参数构造方法内容,super(color,foot)代表执行父类有参数构造方法。

转载之后的自我总结:

若不加修改的话,子类的构造器里都会有 super() 的方法,所以每个子类的构造器都会自动调用父类的无参构造方法。

本文为转载收藏

————————————————
版权声明:本文为CSDN博主「TT海浅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010698072/article/details/51873404