多态
2016-02-15 20:17
232 查看
1.向上转型
【概念解释】将子类的对象赋值给父类的引用
* 不需要强制转换
* 可以访问父类的方法,属性,如果子类重写了,那么调用子类
* 无法访问子类特有的方法及属性(对子类方法或属性进行遮蔽)
【原因解释】
**一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型**;所以子类向上转型之后,能调用哪些方法,取决于父类的类型;
**一个引用调用的是哪一个方法,取决于这个引用所指向的对象**;所以如果调用的属性和方法在子类中也存在,那么调用的是子类的属性和方法;
2.向下转型
【概念解释】将父类的对象赋值给子类的引用(向下转型的前提是向上转型)
* 需要强制转换
* 如果把一个类型转换成其他类型,编译没有报错,执行报:java.lang.ClassCastException --类转换异常
* 如果把一个类型转换成其他类型,然后再由其他类型转换回本类型,编译执行都通过
3.从属
* instanceof 来判断该引用类型变量所“指向”的对象是否属于该类
4.接口的多态
5.多态的体现
* 封装是为了保护属性的一种操作,继承是为了扩展类的功能
* 多态是由封装性和继承性引出的面向对象程序设计语言的另一特征。
* 重载:根据传入的参数不同,完成的功能也不同
* 重写:子类根据需求重写父类中的方法。
##静态多态性(编译时多态)
由方法重载(overload)实现
##动态多态性(运行时多态)
由方法重写(overridden)实现
子类对象可以作为父类对象使用。在程序中凡是需要父类对象的地方,都可以用子类对象代替。
调用规则:根据实例的类型决定调用的方法。
【概念解释】将子类的对象赋值给父类的引用
Pet pet = new Dog("旺财", "狗");
* 不需要强制转换
* 可以访问父类的方法,属性,如果子类重写了,那么调用子类
* 无法访问子类特有的方法及属性(对子类方法或属性进行遮蔽)
【原因解释】
**一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型**;所以子类向上转型之后,能调用哪些方法,取决于父类的类型;
**一个引用调用的是哪一个方法,取决于这个引用所指向的对象**;所以如果调用的属性和方法在子类中也存在,那么调用的是子类的属性和方法;
2.向下转型
【概念解释】将父类的对象赋值给子类的引用(向下转型的前提是向上转型)
//这是错误的 Person p = new Person(); Student s = (Student)p; //这是正确的 Person p = new Student();//必须先向上转型 Student s = (Student)p;
* 需要强制转换
* 如果把一个类型转换成其他类型,编译没有报错,执行报:java.lang.ClassCastException --类转换异常
* 如果把一个类型转换成其他类型,然后再由其他类型转换回本类型,编译执行都通过
3.从属
* instanceof 来判断该引用类型变量所“指向”的对象是否属于该类
if(pet instanceof Dog){ //向下转型 ((Dog) pet).bark(); }
4.接口的多态
>Fly接口 //向上转型 -- 类比 类的继承 Fly fly = new Bird(); //fly.fly(); //接口的多态表现形式 //向下转型 Bird bird = (Bird) fly; bird.fly();
5.多态的体现
* 封装是为了保护属性的一种操作,继承是为了扩展类的功能
* 多态是由封装性和继承性引出的面向对象程序设计语言的另一特征。
* 重载:根据传入的参数不同,完成的功能也不同
* 重写:子类根据需求重写父类中的方法。
##静态多态性(编译时多态)
由方法重载(overload)实现
##动态多态性(运行时多态)
由方法重写(overridden)实现
子类对象可以作为父类对象使用。在程序中凡是需要父类对象的地方,都可以用子类对象代替。
调用规则:根据实例的类型决定调用的方法。
相关文章推荐
- Java用pinyin4j库实现汉字转拼音
- The Java™ Tutorials — Concurrency :Intrinsic Locks and Synchronization 内置锁和同步
- 杂
- nGrinder工具进行接口性能测试
- x265-1.8版本-encoder/level.cpp注释
- 新浪微博之微博分享
- 生活手记
- 城规初探
- JavaScript实现动态加载其他的js文件-(咋个办呢 zgbn)
- aysnctask 处理网络事件
- 台湾科技挣扎,人祸大于天灾?
- 台湾科技挣扎,人祸大于天灾?
- hdu 杭电 2104 hide handkerchief
- x265-1.8版本-encoder/frameencoder.h注释
- Scrapy
- 树状树组(Binary Indexed Tree (BIT))的C++部分实现
- x265-1.8版本-encoder/frameencoder.cpp注释
- iOS SDK详解之UIWindow(让视图在最上层)
- iOS - Runtime
- android:TextView实现文字走马灯效果(欺骗系统获取持久的焦点)