JAVA有三大特性之--- 多态(个人理解)
来源:互联网 发布:28岁赚千万知乎 编辑:程序博客网 时间:2024/06/05 20:19
2017-6-13
JAVA有三大特性 继承,封装,多态
一直以来对多态不是很了解,今天复习了下多态,写下对多态的理解,初学JAVA 有不对的地方请博友指出
多态的前提条件是1.用父类引用指向子类对象
2.子类重写父类的方法
什么是多态?
之所以叫多态,就是因为它是一种事物可以有多重表现的形态。在JAVA中的具体表现就是一个类的,通过继承,重写,实现调用同一个方法,可以输出多种结果。
例如:Animal a1= new cat();
Animal a2= newdog();
同时调用CAT 和DOG中重写ANIMAL中eat()方法
a1.eat();
a2.eat();
输出的结果会是不同的,一个输出猫吃鱼,一个输出狗吃骨头。
这就是多态,父类的一个方法通过指向子类,调用同一个方法会有不同的结果。
那么什么时候会用到多态?
当多个有共同父类的子类调用同一需要传入子类对象的方法时,我们可以用子类共有的父类作为传入对象,用多态的思想父类引用子类对象可以少很多代码。
那么前面说的调用只是调用具有共通属性的。比如说eat(),play().等等 那么猫或者狗特有的属性,例如 a1.catchMouse(),这个方法时猫特有的属性,animal里并没有这个方法,这是调用就会出现编译错误,那么(父类不具备的)在多态的环境里怎么调用呢?
这种情况需要强制转换,转回去。
Cat cat = (CAT)a1; //这种赋值是成立的相当于 Cat cat = Animal a1= new cat();
cat.catchMouse(); 这样才能调用成功。
那么问题又来了, Cat cat = (CAT)a2,编译时也是成功的,但是运行的时候会出现转换异常,
这是instanceof 的出现就很好的解决了这一个问题,
public static void testVoice(Animal c){
if ( a1 instanceof Cat){ //C是一只猫吗 如果是 那么下一步强制转换
((Cat)c).catchMouse();
}
}
- JAVA有三大特性之--- 多态(个人理解)
- Java三大特性个人理解
- JAVA NIO之个人理解
- 个人拙见之java三大特性
- java数据结构队列(Queue)之个人理解
- Java个人理解之时间的使用
- java数据结构栈之个人理解
- 个人总结之java的三大特性
- 数据结构之基础个人理解(一)
- MVC之个人理解
- shuffle之个人理解
- KMP之个人理解
- BeanUtils之个人理解
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java提高篇之理解java的三大特性——多态
- java提高篇(二)-----理解java的三大特性之继承
- 2.7更改菜单命令的文本
- 操作系统(二):进程与线程管理_2
- 华为:图片整理
- 2.8更改命令的外观
- UITableViewCell以及其子控件自适应高度
- JAVA有三大特性之--- 多态(个人理解)
- TopCoder01 SRM 157 DIV2 200分
- 6月13日,每日20行。
- 2135-->数据结构实验之队列一:排队买饭
- 腾讯云Windows2016 64位使用FileZilla部署搭建FTP服务
- html之文档流
- 环境变量配置
- 使用Fitnesse对C++工程作自动化接口测试(4)
- 从高考,到程序员---致敬一路跌跌撞撞