1. 多态:相同的行为,不同的实现,多态一定是方法的多态
2. 多态的分类:
A. 静态多态:编译时,系统就能决定调用哪个方法
B. 动态多态:运行系统中才能动态确定方法所指的对象
3. 多态的实现:
A. 静态多态:使用重载实现
B. 动态多态:使用动态绑定和重写实现
4. 动态多态的技术基础:
A. 向上转型技术:一个父类的引用变量可以指向不同的子类对象或者说一个子类对相关可以被当做一个父类类型
B. Instanceof关键字:用于判断运行时对象的真正类型
C. 动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类的方法,从而实现多态性
D. 引用数据类型只有有继承关系的,才可能在类型转换
父类变量 = 子类对象(大的变量 = 小的值)向上转型(自动转)
子类变量=(子类)父类对象(小的变量=(小的子类)大的值)向下转(强转)
E. 向上转型—把子类的对象赋给父类的变量—一定成功,没有风险,自动转即可
向下转型—把父类值赋给子类的变量—有风险,不一定成功,强转
F. 本类引用指向本类对象
父类引用指向子类对象
子类引用不能指向父类对象
G. Instanceof减少强转风险,为控制风险应该先用instanceof判断在强转
5. 动态绑定机制:
当父类引用指向子类对象的时候,如果我们调用被重写方法,会得到子类重写的效果
因为:这个对象本身就是一个子类对象,所以它的实现一定是子类自己的实现
6. 多态的主要应用——多态参数
——异构集合:基本护具类型没有父类一说,所以不可能放入Object
7. 抽象
A. 抽象类:abstract:当一个方法只能确定其声明,不能确定其实现时,用于返回类型前修饰,该方法设计为抽象方法
B. 语法:在方法申明部分加上一个可选修饰符abstract,然后该方法不能有方法实现部分,连花括号也不能有,用;结束,有抽象方法的类叫抽象类,必须在类名前加上修饰符abstract
8. 抽象类特点
A. 抽象类不能产生对象,因为对象是具体实际的存在,不应该有不确定的东西
B. 抽象类存在的意义就在于产生子类
C. 抽象类里面可以定义属性/构造/方法/初始化块,一个类该有的都可以有
D. 语法上允许一个抽象类里面没有抽象方法,但这样做失去了设计的意义
E. 子类继承抽象类,必须实现抽象类中的所有抽象方法,除非这个子类自己也是抽象类
F. Abstract只能修饰方法和类
G. 可以和放完修饰符交换位置