看到一句话:子类的构造方法,不管这个方法带不带参数,默认地它都会去寻找父类的不带参数的构造方法,如果父类没有不带参数的构造方法,那么子类必须要用super关键字来调用父类的构造方法,否则编译不能通过。
父类:
class Parent {
private String name;
public Parent(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
子类:
class Child extends Parent {
private String name;
public Child() {
super("");
}
public Child(String name) {
super("");
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
此处父类是没有定义无参构造方法的,只有有参构造方法(如果有参构造方法删掉,系统会默认为类构造方法为无参的),此时如果在子类的无参和有参的构造方法里面没有super关键字来调用父类的有参构造方法,系统将会编译出错。
总结:参考文章链接
任何类,都会调用父类的构造方法,如果子类中没有显示地调用,则默认调用父类无参的构造方法,否则必须手工写上调用哪个,而且是在第一行。
@为什么子类构造方法一定要调用父类的构造方法?
子类继承了父类的属性和方法,子类要用父类的属性和方法,就要先初始化父类,这就要调用到父类的构造方法了。
@如果父类有一个属性是private,那子类还有这个属性吗?
子类继承后,这个经过父类初始化后的属性就是子类自己的了,子类虽然不能访问父类的私有属性,但是可以操作父类初始化后给他的这个属性。
@子类和父类有同名属性
如果同名同类型,子类会覆盖父类同名的属性,父类初始化该属性的值将不会影响子类
@子类和父类有同名方法
如果同名方法返回值和形参都相同,子类方法将替代父类方法
如果同名方法返回值不同,形参相同,那么该方法将不被允许,因为这相当于在子类中同时有了两个方法名和形参值相同的方法
其余情况均相当于在子类方法中多出了几个重载方法