多态:相同的行为,不同的实现(重写、重载)
多态:
1、静态多态:编译时,系统就能确定调用的是哪个方法---使用重载实现
2、动态多态:运行中系统才能动态确定方法所指的对象---使用动态绑定和重写实现
动态多态的技术基础:
引用数据类型转换的前提:不是任意引用数据类型都可以进行转换(没办法“指鹿为马”),只有有继
承关系的类才能转换。
1、向上转型技术---自动转换类型---把小类型的对象放到大类型的引用中---没有任何风险,绝对成功
---子类对象中由于包含了一个完整的父类对象部分,所以父类引用可以指向子类对象
---对于同一个子类对象,用父类引用指向只能看到它身上来自于父类的方法,换成子
类引用指向的时候可以看到所有的方法(都要受访问修饰符限制)
在Java中除了本类的引用指向本类的对象是绝对正确且没有特殊操作以外,父类的引用指向子类对
象也是绝对正确
Object的引用可以指向所有类型的独享,它是所有类的根类
2、向下转型技术---强制转换类型---把大类型指向的对象放到小类型的引用中---有风险,风险是编译
通过,可能运行报异常
由于父类引用现在不仅仅能够指向父类对象,也可以指向各种子类对象;所以父类引用的变化性增大。当我们把它赋给一个子类引用时,必须强制告知这就是该子类的对象,才能编译通过。但是运行起来后,如果该父类引用指的不是该子类对象,还是会运行失败,报异常。只有该父类引用确实指向该子类对象,才会运行也成功。
当父类引用指向子类对象时,只能看到来自父类的属性和行为
当调用重写方法时,一定得到的是子类重写后的效果,因为对象时子类对象
instanceof关键字:在强转之前做判断,规避掉强转之后的运行异常
instanceof是一个运算符
抽象:
当一个方法只有方法的申明,没有方法的实现,这样的方法就是抽象方法
抽象方法用abstract关键字修饰
当一个类具备一个抽象方法,这个类就不能够再被new 对象了,这个类就叫抽象类,需要用关键字abstract修饰。
特点:
1、抽象类不能产生对象---1)在做类的继承设计时,当父类抽取到一定程度,就没有产生对象的必要
了,因为所有有意义的对象,一定是属于某个子类类型的
2)如果一个类有抽象方法,那么这个类就一定是抽象类。因为具体实际存
在的对象不可能有抽象的内容。
3)语法上:抽象类可以没有抽象方法,只要在类声明的地方加了abstract;
有抽象方法的类,一定是抽象类
2、抽象类的作用:专门用来设计为父类的---子类必须重写来自于抽象类的抽象方法,从而达到了子类
的实现必须遵循设计人员的一支
---如果子类不重写抽象方法,那么该子类也只能是抽象类
3、抽象类也是类,所以能够再其中书写属性、构造、方法