重写,多态与对象类型转换
重写:需要有继承的关系,子类重写父类的方法
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但是不能缩小 public>protected>Default>private
-
抛出异常,范围可以被缩小但是不可以扩大 Exception> ClassNotFoundException
重写的意义:子类与父类的的方法必须一致,但是方法体不同;
为啥需要重写:父类的功能子类不一定需要,或者不一定满足,所有就需要自己去实现自己想要的方法(Alt+Insert 点击override)
多态
多态注意事项:
-
多态是方法多态,属性是没有多态的
-
父类和子类,是需要有联系的才可以,否则会出现类型转换异常!ClassNotFoundException
-
存在条件:两个类之间是继承的关系,方法需要重写,父类引用指向子类对象! Father fa1=new Son();
1. static方法属于类,不属于实例
2. final 常量
3. private方法;上述三种情况都是不可以修饰的方法都是不可以有多态的。
/Father fa1=new Son();/
这种多态情况,如果使用fa1实例去调用方法,如果子类Son中重写了父类Father的方法,那么执行子类的方法。如果父类与子类都有相同的方法,那么都执行父类的中的方法;
instanceof与类型转换
子类转父类由于子类已经继承的父类的所有的方法,所有只需要删除自己特有的方法即可转换成功 (向上转型)
父类转子类因为需要重新开辟子类中特有方法的空间,所以需要强转。(向下转型)
-
/Father fa1=new Son();/ 这种是父类的引用指向子类的对象
-
把子类转为父类,向上转型,直接转即可;(可能会丢失自己子类本来的一些方法)
-