用于访问父类的成员:
super.成员变量
super.成员方法([参数1],[参数2]...)
使用supe关键字调用父类的构造方法:
super([参数1],[参数2]...)
注意:
在子类的构造方法中一定会调用父类的某个构造方法,这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法(当父类定义了带参数的构造方法没有定义无参的构造方法时,父类是没有默认的无参的构造 方法的)。
子类在实例化时默认调用了父类无参的构造方法,所以在定义一个类时,如果没有特殊的需求,尽量在类中定义一个无参的构造方法,避免被继承时出现错误。
package study;
class Animal{
public Animal(String name) {
System.out.println("我是一只"+name);
}
}
class Dog extends Animal{
}
public class Example04 {
public static void main(String[] args) {
Dog dog=new Dog();
}
}
结果:
子类必然会调用父类的构造方法。
要不然是你显式调用,要不然是Java自动调用。
如果父类有不带参数的构造方法,或者父类没有任何构造方法(也就是说有缺省构造方法),那么子类可以不显式调用,子类会自动调用super();
如果父类有带参数的构造方法,却没有不带参数的构造方法,那么如果子类没有显式调用父类构造方法,那么编译会报错。