继承之super关键字的使用
一、super关键字:
在对象的内部使用,可代表父类对象。
1.
访问父类的属性:super.age
2.
访问父类的方法:super.eat()
例:
package 关键字extends;
public class Dog extends Animal{
int age=20;
public void eat(){
System.out.println("狗具有吃东西的能力!");
}
public Dog(){
System.out.println("子类执行了!");
}
public void method(){
System.out.println(super.age);//访问父类的属性
super.eat(); //访问父类的方法
System.out.println(age); //访问父类的属性
eat(); //访问子类方法
}
}
结果:
父类执行了!
子类执行了!
40
动物具有吃东西的能力!
20
狗具有吃东西的能力!
二、
子类的构造过程当中必须调用父类的构造方法
创建子类对象的时候,会自动执行父类构造方法,并创建父类对象。此时就隐式的使用了super关键子。
super关键字显示的写出来:
package 关键字extends;
public class Dog extends Animal{
int age=20;
public Dog(){
super(); //super关键字
System.out.println("子类执行了!");
}
}
主函数中:
Dog dog=new Dog();//创建子类对象
//dog.method();
父类执行了!
子类执行了!
super关键字隐识表达:
public class Dog extends Animal{
int age=20;
public Dog(){
//super(); //这里注释掉super关键字
System.out.println("子类执行了!");
}
}
主函数中:
Dog dog=new Dog();
//dog.method();
结果:
父类执行了!
子类执行了!
三、
如果子类的构造方法当中没有显示调用父类的构造方法,则系统会默认调用
父类无参的构造方法
如果要显示的调用构造方法,则super关键字必须放在子类的构造方法的第一行
四、
如果子类的构造方法中既没有显示的调用父类的构造方法,
而父类又没有无参的构造方法,则编译出错
也就是说父类有有参的构造方法,子类的无参构造函数就会报错!!!
如何修改:
1.使用显示调用父类的构造函数并传入参数值;
public Dog(){
super(3); //子类显示调用并传入参数
System.out.println("子类执行了!");
}
2.在父类中在添加一个无参的构造方法
public Animal(){ //无参的构造方法
System.out.println("父类执行了!");
}
public Animal(int age){ //有参的构造方法
this.age=age;
}
五、总结
子类的构造过程当中必须调用父类的构造方法。
如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。
如果显示调用父类的构造方法则必须放在子类构造方法的第一行。
如果子类的构造方法中既没有显示的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错!!