一个对象的实际类型是确定的,例如图中的
Student和Person类型
这里举例时Person类为父类,Student类为子类。
1.父类可以指向子,但是不能调用子类独有的方法
如图中,s2为子类,s1为父类,eat方法为子类Student里独有的方法3,尽管子类继承了父类,但是最后调用的时候,只能调用到子类,不能调用父类。
2.如果子类重写了父类的方法,那么执行子类的方法。
图中
这是父类的say方法,最后输出的是run,而如果在子类中用alt+insert重写(override method)了父类的run方法,
这里为了方便区分,我们在子类中重写方法时选择重新输入yes,最后调用子类和父类中的say方法,
可以看到最终输出的都是yes马,因此可以得出结论:当子类重写父类的方法时,执行的都是子类中重写的方法。
3.子类中能调用的方法要么是自己的方法,要么是继承的父类的方法
4.父类虽然能指向子类,但是不能调用子类独有的方法
注意事项:1.多态是方法的多态,不是属性的多态
2.类型强制转换的话一定要有父子类之间的关系才能进行转换,如举例中的Studenr类和Person类为Student作为子类继承了父类Person类,当有类似这样的联系时才可以进行转换。
3.多态存在的条件:(1)要有继承关系 (2)方法要进行重写,父类引用指向子类对象,例如父类为Father为父类,son为子类,就是Father s1 = new Son();
**不能重写的方法:1.static方法,它属于类,不属于实例
2.被final修饰的,是在常量池里
3.private方法,private方法是私有的,无法被重写



