子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。
方法的重写需要符合下面的三个要点:
1.“==”: 方法名、形参列表相同。
2.“≤”:返回值类型和声明异常类型,子类小于等于父类。
3.“≥”: 访问权限,子类大于等于父类。
一、用IDEA快捷键 Alt+Insert 重写父类方法
public class TestOverrider {
public static void main(String[] args) {
//定义三个对象,分别对应 Animal,cat,dog
Animal a1 = new Animal();
cat c1 = new cat();
dog d1 = new dog();
a1.sleep();
a1.study();
c1.sleep();
c1.study();
d1.sleep();
d1.study();
}
static class Animal{
public void sleep(){
System.out.println("休息中,勿扰");
}
public void study(){
System.out.println("学习中,勿扰");
}
}
static class cat extends Animal{
@Override
public void sleep() {
super.sleep();
}
}
static class dog extends Animal{
@Override
public void sleep() {
super.sleep();
}
@Override
public void study() {
super.study();
}
}
}
运行结果:
休息中,勿扰
学习中,勿扰
休息中,勿扰
学习中,勿扰
休息中,勿扰
学习中,勿扰
二、用普通方法重写父类方法
public class TestOverride02 {
public static void main(String[] args) {
//定义三个对象,分别对应 Animal,cat,dog
TestOverrider.Animal a1 = new TestOverrider.Animal();
TestOverrider.cat c1 = new TestOverrider.cat();
TestOverrider.dog d1 = new TestOverrider.dog();
a1.sleep();
a1.study();
c1.sleep();
c1.study();
d1.sleep();
d1.study();
}
class Animal {
public void sleep() {
System.out.println("休息中,勿扰");
}
public void study() {
System.out.println("学习中,勿扰");
}
}
class Cat extends Animal{
public void sleep() {
System.out.println("休息中,勿扰");
}
}
class Dog extends Animal{
public void study() {
System.out.println("学习中,勿扰");
}
}
}
运行结果:
休息中,勿扰
学习中,勿扰
休息中,勿扰
学习中,勿扰
休息中,勿扰
学习中,勿扰
两种方法实现效果相同!