面向对象-重写以及super关键字
方法的重写(override)
概念:子类把父类里的成员方法再写一遍。
1.在子类中可以根据需要对从基类中继承来的方法重新实现一次。
重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
2.重写方法不能使用比被重写方法更严格的访问权限。(由于多态)
为什么需要重写父类的方法?
1.父类实现的方法不符合子类的逻辑(父类实现的逻辑不满足需求了)下方蓝色字体是代码的引用
2.父类已经实现了80%,但是子类又必须要使用剩下的20%,所以可以重写父类方法,在方法内用super关键字调用父类的方法,再去完成剩下的20%工作 下方红色字体是代码的引用
public class Pet {
private String name;
private int age;
private int health;
public Pet(String name, int age, int health) {
super();
this.name = name;
this.age = age;
this.health = health;
}
public Pet() {
super();
// TODO Auto-generated constructor stub
}
public void print() {
System.out.println(name+age+health);
}
public void eat() {
System.out.println("宠物在吃饭");
}
public void bark() {
System.out.println();
}
此处省略设置器访问器
}
public class Dog extends Pet{
private String brand;
public Dog() {
}
public Dog(String name, int age, int health, String brand) {
super(name, age, health);
this.brand = brand;
}
@Override
public void eat() {
System.out.println("狗在吃骨头");
}
@Override
public void bark() {
System.out.println("won won won...");
}
@Override
public void print() {
System.out.println(brand);
super.print();
}
此处省略设置器访问器
}
super关键字

super是直接父类对象的引用。
可以通过super来访问父类中被子类覆盖的方法或属性。(如上既是重写的第二种形态)
super的位置
普通方法:
没有顺序限制。可以随便调用。
构造函数中:
任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加都无所谓。
super调用过程
通过子类的super()把参数传给父类构造器给父类的成员变量赋值
浙公网安备 33010602011771号