class Person{
public void run(){System.out.println(“person run");}
public void eat(){System.out.println(“person eat");}
}
class Student extends Person{
public void run(){System.out.println(“student run");}
public void study(){System.out.println(“student study");}
Person是父类,Student是子类
Person p = new Student();
//1.向上转型:父类的引用指向子类对象
//编译类型是Person 写代码时候编译器只认编译类型 运行类型是Student
p.run();//只能访问父类的方法,子类的访问不到
//运行的时候动态绑定机制执行运行类型Student 从运行类型开始找 先找Student子类开始找
//student run
p.eat();//子类没有找父类 person eat
//2.向下转型:把指向子类对象的父类引用,转成指向子类对象的子类引用。
Student s = (Student)p;//原先是父类引用变成了子类引用就可以访问子类的方法
s.run();// student run
s.study();//student study
s.eat();//person eat