!!!!子类不能继承父类的构造函数
构造方法是一个类独有的方法,不会被其他类继承,但是可以被重载
在构造子类时,一定会调用父类的构造方法,但是区别调用和继承
当父类有无参构造方法时
- 子类实例化对象时,会先调用父类的构造方法,如果子类的构造方法没有显式调用父类的构造方法,自动调用父类无参的构造方法(相当于省略了super();)
class Father{
String s = "父类";
Father(){
System.out.println("父类的无参构造方法");
}
}
class Son extends Father{
String s = "子类";
Son(){
//super();这句话加不加都可以,此处为隐式调用,只要new Son对象,都会先执行父类的构造方法
System.out.println("子类的构造方法");
}
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
}
}
output:
父类的无参构造方法
子类的构造方法
当父类只有有参构造方法时
- 如果父类没有无参构造方法,且子类的构造方法中有没有显式的调用父类其他构造方法,则java编译器会报错
- 子类要使用父类有参的构造方法,使用==super(参数)==形式,且super必须在子类构造方法中的第一句
class Father{
String s = "父类";
Father(String s){
System.out.println("父类的有参构造方法");
System.out.println(s);
}
}
class Son extends Father{
String s = "子类";
Son(){
super("super中输入的字符串s");//必须要加上这个,否则会报错,并且要加在子类构造方法的第一句
System.out.println("子类的构造方法");
}
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
}
}
output:
父类的有参构造方法
super中输入的字符串s
子类的构造方法
当父类有有参构造方法也有无参构造方法时
class Father{
String s = "父类";
Father(String s){
System.out.println("父类的有参构造方法");
}
Father(){
System.out.println("父类的无参构造方法");
}
}
class Son extends Father{
String s = "子类";
Son(){
//super();这句话加不加都可以,此处为隐式调用,只要new Son对象,都会先执行父类的无参构造方法
//super("666");如果加了这句,就会执行父类的有参构造方法
System.out.println("子类的构造方法");
}
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
}
}
output:
父类的无参构造方法
子类的构造方法