多态和抽象
多态可以说是面向对象编程得精髓所在。在Java中,多态有两种不同的理解方式,一种是对象的不同的方法可以用相同的方法名,既重载的概念。另一种是同一对象根据不同的消息执行相应的行为。根据这两种方式又可以分成静态多态和动态多态。
静态多态指的是程序在编译时,系统就能决定调用哪个方法,所以也叫编译时多态
动态多态只在运行中系统才能动态确定方法所指的对象,也称为运行时多态。多态多态的实现方法是重写父类中的同名成员方法。动态多态只要通过动态绑定和重写来实现多态
多态的三个技术
- 向上转型技术,一个父类的引用变量可以指向不同的子类对象,或者一个子对象可以被当做一个父类对象
- instanceof关键字:instanceof关键字用于判断运行时对象的真正类型
- 动态绑定技术:运行时根据父类引用变量所指对象的实际类型来执行相应的子类方法,从而实现多态性
向上转型和向下转型
在父类子类继承关系中,沿着子类向父类向上转型是自动转换,而从父类向子类必须使用强制类型转换才能实现向下转型
多态参数
当方法的某个形式参数是一个引用的时候,与该引用兼容匹配的对象都可以传给方法,从而使方法可以接受不同数据类型的形式参数
异构集合
多态最常见的应用是创建一个不是同一类型,但却有共同的父类的数据集合,不同对象的集合就是异构集合
抽象
在继承中,因为某些方法都会在子类中被重写,所以父类中就不需要实现方法,所以就把类定义为抽象类。抽象类是不能实例化的,他的功能还是一样的.
Java中 使用关键字abstract可以声明一个抽象类;该关键字可以出现在类生命是class关键字前的任何地方
抽象方法 - 如果一个方法被声明为抽象方法,那么该类也必须声明为抽象类 - 任何子类必须重写抽象方法,除非子类本身也是抽象的