Java面向对象(8)多态
来源:互联网 发布:网络推广工程师 编辑:程序博客网 时间:2024/05/17 01:50
多态
April 25, 2016 8:48 PM By DeiMo
多态概述
定义:某一类事物的多种存在形态。
例如:动物中的猫,狗
Cat cat = new Cat();
同时猫也是动物中的一种,也可以把猫称为动物。
Animal animal = new Cat(); 动物是猫和狗具体事物中抽取出来的父类型。 父类型引用指向了子类对象
简单说:就是一个对象对应不同类型
多态在代码中的体现:父类或者接口的引用指向其子类的对象。
多态的好处
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端
前期定义的内容不能使用(调用)后期子类的特有的特有内容
多态的前提
1.必须有关系:继承or实现
2.必须由覆盖。
多态注意事项
1.向上提升:
Animal a = new Cat();//自动类型提升,猫对象提升了动物类型。但是特有功能无法访问
作用就是限制对特有功能的访问
2.向下转型
Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法 c.catchMouse();
向下转型的目的是为了使用子类中的特有方法。
3.总结:无论是向上提升还是向下转型,自始自终都是子类对象在做着类型的变化。
instanceof关键字
用于判断对象的具体类型。通常在向下转型前用于健壮性的判断
public static void method(Animal a){ a.eat(); if(a instanceof Cat){ Cat c = (Cat)a; c.catchMouse(); }else if(a instanceof Dog){ Dog d = (Dog)a; d.lookHome(); }else{ ... }}
多态时成员特点
1.成员变量
- 编译时:参考引用型变量所属的类中是否有调用的成员变量。有,编译通过,否则编译失败
- 运行时:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员。
- 总结:编译和运行都参考等号的左边。
2.成员函数(非静态)
- 编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
- 运行时:参考的是对象所属的类中是否有调用的函数。
- 总结:编译看左边,运行看右边。
3.静态函数
- 编译时:参考引用型变量所属的类中的是否有调用的静态方法。
- 运行时:参考引用型变量所属的类中的是否有调用的静态方法。
- 总结:编译和运行都看左边。其实对于静态方法,是不需要对象的。直接用类名调用即可。
0 0
- Java面向对象(8)多态
- java面向对象-多态
- java 面向对象 多态
- Java面向对象 ----多态
- JAVA面向对象-----多态
- Java面向对象 多态
- java面向对象/多态
- Java 面向对象 多态
- java面向对象8
- java基础要点(8)面向对象-多态
- Java面向对象_多态
- java笔记-面向对象-多态
- java面向对象(多态)
- Java面向对象--多态、异常
- #4JAVA面向对象-多态#
- JAVA 面向对象之 多态
- JAVA面向对象6:多态
- Java面向对象特性--多态
- 2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能
- ASM中的几个迷魂的概念
- equals和==引发的问题
- latch: cache buffers chains导致CPU冲高的问题
- Web App 和 Native App 各自优劣势(转载自知乎)
- Java面向对象(8)多态
- 21天 新手SEO基础计划(目录整理)
- java.lang.NoClassDefFoundError: org/objectweb/asm/Type
- E: Some index files failed to download. They have been ignored, or old ones used instead.解决方案
- 一、NGN的基本概念和体系结构
- BZOJ2085[Poi2010] Hamsters
- css3 transform 旋转
- 第一行代码系列第三章——自定义布局
- spring-项目启动下获取Bean实例