*java学习之路:继承中构造方法的访问特点
定义一个父类
public class Fu {
public Fu(){//父类构造方法
System.out.println("父类方法的无参构造");
}
}
定义一个子类
public class Zi extends Fu {
public Zi(){//子类构造方法
System.out.println("子类无参构造方法");
}
}
定义一个子类对象,当创建一个类对象时,其实就是在调用类的构造方法
public class Demo01Constructor {
public static void main(String[] args) {
Zi zi = new Zi();
}
}
运行得到结果
父类无参构造方法
子类无参构造方法
可以看到,是父类的构造方法先运行
那是因为子类的构造方法内会默认存在一个super(),super()就是调用父类的构造方法的
public class Zi extends Fu {
public Zi(){
super();//是默认赠送的,但是没有参数,调用父类的构造方法
System.out.println("子类无参构造方法");
}
}
当父类的构造方法变为有参数构造方法时,那么子类中这个默认赠送super()方法就不能正确调用父类的构造方法,因此需要向super()的括号中添加参数。
父类
public class Fu {
public Fu(int num){
System.out.println("父类有参构造方法");
}
}
对应的子类
public class Zi extends Fu {
public Zi(){
super(20);//调用父类的构造方法
System.out.println("子类无参构造方法");
}
}
结论:1、当父类中的构造方法只有一个无参构造方法或者有一个无参构造方法和一个全参构造方法时,那么子类的构造方法中可以没有super();的,编译器也不会报错,当然自己写上一个也可以。
2、当父类中只有一个全参构造方法时,那么子类的构造方法中一定要有一个super(参数);不然编译器会报错
第一次写博客记录自己的学习情况,加油!!!