一, 多态的概念
多态是继封装, 继承之后, 面向对象的三大特性.
现实事物经常会体现出多种形态, 如学生, 学生是人的一种, 则一个具体的张三同学既是学生也是人, 即出现两种形态.
java 作为面向对象的语言, 同样可以描述一个事物的多种形态, java 中多态的代码体现在一个子类对象 (实现类对象) 既可以给这个子类 (实现类对象) 引用变量赋值, 又可以给这个子类 (实现类对象) 的父类(接口) 变量赋值.
父类的引用变量指向子类对象. 多态的前提需要有继承关系或者是实现关系, 否则没法完成多态. 在使用多态后的父类引用变量调用方法时, 会调用子类重写的;
二, 多态的定义与使用
多态的定义格式: 就是父类的引用变量指向子类的对象;
父类类型变量名 = new 子类对象();
变量名. 方法名();
1. 普通类的多态定义格式:
父类类型变量名 = new 子类();
2. 抽象类多态的定义:
抽象类变量名 =new 抽象类子类();
3. 接口多态定义的格式:
接口变量名 =new 接口实现类();
注意: 虽然变量指向子类的对象, 但表现的是一个父类的形态, 可以调用一切父类的方法, 子类特有的方法将不能调用
三, 多态调用的注意事项:
编译: 成员变量, 成员方法都需要看父类; 父类没有编译报错;
运行: 成员变量运行父类的成员变量, 成员方法运行父类重写的方法
四, 多态的好处与弊端
好处: 多态配合继承子类重写, 提高了代码的复用性与扩展性
弊端: 不能调用子类特有的方法
五, 向上向下类型转换
多态本身是子类类型向父类类型向上转型的过程;
1. 向上转型:
当子类的对象赋值给一个父类的引用时, 便是向上转型, 多态本身就是向上转型的过程
使用格式: 父类类型 变量名 = new 子类类型();
2. 向下转型:
一个已经向上转型的子类对象可以使用强制类型转换的格式, 将父类的引用转换为子类引用, 这个过程是向下转型. 直接创建父类对象的无法使用向下转型;
使用格式:
子类类型 变量名 = (子类类型) 父类类型的变量;
六, instanceof 关键字
可以通过 instanceof 关键字来判断某个对象是否属于某种数据类型;
使用格式:
boolean b= 对象(new ) instanceof 数据类型;
来源: http://www.jianshu.com/p/f88af179a1a9