/*父类*/
public class People {
public void goToSchool() {
System.out.println("父类的方法");
}
}
/*子类1*/
public class Student extends People {
@Override
public void goToSchool() {
System.out.println("子类重写父类的方法“+“ 学生骑自行车去学校");
}
}
/*子类2*/
public class Teacher extends People {
@Override
public void goToSchool() {
System.out.println("子类重写父类的方法"+ " 老师开车去学校");
}
}
/*测试类*/
public class Test {
public static void main(String[] args) {
People fu=new Student();//父类引用指向子类
fu.method();//调用该方法控制台显示 子类重写父类的方法 学生
fu=new Teacher();
fu.method();//调用该方法控制台显示 子类重写父类的方法 老师
}
}
条件:
一、有继承。extends
二、父类引用指向子类。People people=new Student();
多态:官方解释:同一个行为具有多个不同形态的表现形式。
代码解释:就是父类的一个方法,被多个子类重写。
父类的同一个行为动作(去学校)有两种子类重写后的方法去实现。
子类一 学生骑自行车去学校。
子类二 老师开车去学校。
二、调用方法规则。
People people=new Student();
people.method();
编译会检查左边父类引用(People people),如果左边父类中没有method()方法,则会编译报错。
运行检查右边实例化的对象(new Student()),先去子类中查找是否有method()方法,如果没有就去父类中找method方法。