同一方法可以根据发送对象的不同而采取多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
多态存在的条件:有继承关系
子类重写父类方法
父类引用指向子类对象
多态是方法的多态,属性没有多态性
可以实现动态编译,程序类型的最终状态只有在执行过程中才可以确定,多态可以让可拓展性变得更强
子类重写了父类的方法后,会调用子类的方法
但是它不能直接调用子类中的方法
对象能执行哪些方法主要看左边的类型,和右边关系不大
子类能调用的方法都是自己的或者继承父类的
父类可以指向子类,比如上面的Person s2 = new Student;但是不能调用子类独有的方法
但是可以强制类型转换,比如((Student) s2).eat();这样就可以调用子类中的eat方法
不能重写的方法:static 方法,属于类,不属于实例
final 常量
private方法
System.out.println(x instanceof y)//编译是否通过要看x和y是否有父子关系
类型之间的转换
父是高的,子是低的,父转子需要强转
比如上面,Person s1 = new Student();
这时候s1是不能直接调用子类Student里面的方法的,需要强制类型转换
((Student)s1).子类中的方法就可以了;
子类转换为父类,可能丢失自己的本来的一些方法;