多态与抽象
多态与抽象是javaoo中的两大特征。
多态的概念
多态是指一个对象有多种形式的能力。一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征
多态的类型
多态可以分为静态多态和动态多态。
静态多态指的是程序在编译时,系统就能决定调用哪个方法,所以也称为编译时多态。
静态多态实现的方式就是方法重载
动态多态指在运行中系统才能动态确定方法所指的对象,所以也称为运行时多态。
动态多态主要通过动态绑定和重写的机制来实现。
动态绑定机制
动态绑定,是指在运行时根据具体对象的类型进行绑定。
instanceof关键字:
instanceof关键字用于判断运行时对象的真正类型。
对象 instanceof 对象类型
转型技术
向上转型技术(数据类型转换):
引用数据类型的向上转型,是指子类向弗雷转型,编译器会自动识别。
能自动转型成功,原因是:父类的范围大于子类的范围
一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当作一个父类类型。引用数据类型只适用于父子之间,不能去玩:指鹿为马。
向下转型技术
父类的引用可以指向子类的实现是因为子类的实例,拥有完整的父类的所有值数据。
引用数据类型向下转型存在风险,不是一定能转型成功。如果希望转型成功,必须满足以下两个条件:
1. 必须是父类的引用指向一个子类的的实现
2. 子类的引用最终必须指向相同类型的子类实现
多态应用场景
多态参数
当方法的某个形式参数是一个引用时,与该引用兼容的任何对象都可以传递方法,从而循序方法接受不同数据类型的形式参数。
异构集合
把不同类型的对象装入一个集合中
抽象
抽象的概念
如果我们不需要类的实例时,就可以将类设计成为一个抽象类。所谓抽象类,是不能被实例化的类。在抽象类中,类的所有其它功能都存在,成员变量、方法、构造器都可以用同样的方式访问。我们只是不能创建抽象类的实例。
抽象的特点
抽象类可以继续编写属性、行为、初始化块、静态常量,甚至连构造都可以。
但是构造器此时的作用,并非是为了创建对象,而是用于分配成员成量的存储空间。
但是抽象类中,不一定必须要有抽象方法(语法上)
抽象方法的作用
Abstract在定义方法的时候,最大的作用:用来规范子类的行为
方法申明为抽象的两个条件
将父类声明为抽象后,仅有的改变是我们不能再实例化一个父类对象,其他的所有保持不变。
将一个方法声明为抽象方法有两个结果:
1. 类必须声明为抽象类。
2. 任何子类必须重写抽象方法,除非子类本身也是抽象的。
抽象类的好处:强制要求子类实现父类的抽象方法