19、多态
父类的引用指向子类对象
左边引用类型 = 右边实际类型
父类名称 对象名 = new 子类名称
- 动态编译:类型:可扩展性
- 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
- 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。
- 多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
- 注意:多态是方法的多态,属性没有多态性。
- instanceof —> 引用类型的类型转化–> 判断两者之间是否存在父子关系
- 子类转化父类:直接转化(向上转型)
- 父类转子类:强制转化(向下转型)
- 方便方法的调用,减少重复的代码,减少耦合性
多态的注意事项:
父类的引用指向子类多态
Student是子类,Person是父类 子类引用的方法可以调用它本身的方法和继承过来的方法 Student s1 = new Student(); ========================================================== 父类引用的方法,可以调用父类的方法,不可以调用子类独有的方法 Person s2 = new Student(); 形式1:父类没有run方法,子类有run方法,如果s2.run();会报错 形式2:父类有run方法,子类没有run方法,如果s2.run();执行父类的run方法 形式3:父类有run方法,子类有run方法,如果s2.run();执行子类的run方法 总结:如果是父类引用指向子类的情况,则调用的方法必须父类拥有才可执行 父子类两者同时拥有同一种方法则优先使用子类的方法
-
多态是方法的多态,属性没有多态
-
父子之间的关系,有联系,才有多态,类型转化异常!ClassCastException!
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象(Father s2 = new Son()😉
有些方法不可以重写:
- static 方法,属于类,它不属于实例
- final 常量;
- private 方法;