super关键字
JAVA中存在关键字 super 当子类重写父类的方法以后,不能直接通过子类对象直接调用父类,这里提供了super关键字
格式为
super.成员变量
super.成员方法([参数1,参数2……])
但是发现当父类只存在有参构造方法的时候 ,子类去继承会报错
原因是每一个构造方法都会存在一个隐藏的super()去调用父类的无参构造器
而这里父类只是显示的声明了有参构造器 并没有声明无参构造器
代码如下
public class Animals {
public Animals(String name, int age) {//仅提供有参的构造方法 不提供无参的
this.name = name;
this.age = age;
}
String name;
int age;
public String show(){
return "姓名是"+name+",年龄是"+age;
}
}
public class Dogs extends Animals { //There is no default construcotr available in '...'
分析出错原因:在子类的构造方法中,一定会调用父类的某个构造方法
处理方法:通过super关键字指定调用父类的哪个构造方法 如果未指定就会自动调用父类无参构造
简单的说:在子类的构造方法里调用了父类有参的构造方法就行了
public class Dogs extends Animals {
public Dogs(){
super("狗",2); //调用父类的有参构造方法 不再报错 编译通过
}
}
最后搞个测试类测试一下,发现运行正常
public class Test {
public static void main(String[] args) {
Dogs dogs=new Dogs();
String show = dogs.show();
System.out.println("show = " + show);
}
}