多态
来源:互联网 发布:永硕网盘源码 编辑:程序博客网 时间:2024/06/06 03:57
多态:多种状态,比如说中文翻译成意思相同的多种语言。
多态指的是编译时类型变化,而运行时类型不变。
多态分两种:
编译时多态:编译时动态重载;
运行时多态:指一个对象可以具有多个类型。
对象是客观的,人对对象的认识是主观的
Animal a=new Dog();
查看格式名称,(编译时看左边,运行时看右边)
Dog d=(Dog)a
声明父类来引用子类。(强制转换)
编译时类型一定要为运行时类型的父类(或者同类型)
对于语句:
Dog d=(Dog)a
将 d 强制声明为 a 类型
此时 d 为 Dog(),此时 d 就 可以调用运行时类型
注意:a 和 d 指向同一对象
多态:指同一个实体同时具有多种形式
好比,你去面馆吃面,说我要吃面,那么;老板给我牛肉面,鸡蛋面等都可以,
这就是说"面"有多种形态,也就是说实体有多种形态;
编译时的类型由声明该变量时使用的类型决定,
运行时的类型由实际赋给变量的对象决定。
如果编译时类型和运行时类型不同,就出现多态。
前提:Student extends Person:
Person p = new Person();
Student s = new Student();
Person p = new Student();//多态
引用关系:父类变量指向子类实例对象
多态的体现
父类的引用指向自己的子类对象
父类的引用也可以接受自己的子类对象
父类的引用只能访问父类中的成员
多态实现的前提是类与类之间是有继承或实现关系且存在覆盖
实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
多态的作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
只修改方法的实现,不必修改方法的声明
继承是多态产生的前提条件;
分类:
编译时多态:方法重载
运行时多态:方法覆写
多态时,成员的特点:
成员变量
编译时;参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时;参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。
成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。
因为成员函数存在覆盖特性。
静态函数
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
编译和运行都看左边。
静态方法,是不需要对象的。直接用类名调用即可。
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- iOS开发使用AFN请求服务器数据,报错误码-1016的解决办法(图解)
- Android图片选择器、多选框架
- ubuntu 软件安装和配置
- scala学习
- zoj-3946-Highway Project【13th浙江省赛】【最短路】
- 多态
- 116.Reverse Vowels of a String
- 函数指针数组的例子
- mysql 做增量备份
- Git - config
- 内存这个大话题
- 生活感悟2016-4-23
- 2016.4.23 低空贴近零基础开发Android遇到的问题(一)
- HDU - 2955 Robberies