面向对象-重写以及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()把参数传给父类构造器给父类的成员变量赋值

 

  

posted @ 2019-09-28 19:45  我今天也很帅  阅读(152)  评论(0)    收藏  举报