多态
2015-08-02 20:34
204 查看
什么是多态?一个对象,两种形态。Person p = new Student();学生既具有学生本身的性质,还具有人的性质。一种事物多种形态,这就是对象的多态性。多态在代码中体现就是,父类的引用指向子类的对象。多态提高了代码的扩展性,前期定义的代码可以访问后期定义的内容,但前期定义的内容无法访问后期子类特有的内容。多态的前提:①必须要有关系,继承或者实现。②要有覆盖。
Person p = new Student();所创建的对象的引用是Person类型的,对象提升为Person类型,向上转型,p无法访问Student中定义的特有方法。向上转型,将子类隐藏,不再访问子类的特有方法。如果需要访问子类的特有方法,可以将子类对象向下转型,Student p1 = (Student) p;这样就可以使用子类中特有的方法。
关键字 instanceof常用于判断对象的具体类型,只能用于引用数据类型的判断,通常在向下转型前用于健壮性的判断。
①成员变量
编译时,参考引用型变量所属的类中是否有调用的成员变量,有,编译通过。没有,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单来说,就是编译和运行都看等号的左边。
②成员函数(非静态)
编译时,参考引用型变量所属的类中是否有调用的函数,有,编译通过。没有,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数,有,运行对象所属的类中的函数。
简单来说,编译看左边,运行看右边。这是因为成员函数的覆盖性所造成的。
③静态函数
编译时,参考引用型变量所属的类中是否有调用的静态函数方法。
运行时,参考引用型变量所属的类中是否有调用的静态函数方法。
简单来说,就是编译和运行都看等号的左边。其实多态性是指的对象的多态性,而对于静态方法是不需要创建对象的,直接类名调用就可以了。
Person p = new Student();所创建的对象的引用是Person类型的,对象提升为Person类型,向上转型,p无法访问Student中定义的特有方法。向上转型,将子类隐藏,不再访问子类的特有方法。如果需要访问子类的特有方法,可以将子类对象向下转型,Student p1 = (Student) p;这样就可以使用子类中特有的方法。
关键字 instanceof常用于判断对象的具体类型,只能用于引用数据类型的判断,通常在向下转型前用于健壮性的判断。
if(p instanceof Student) { Student p1 = (student) p; }多态时,成员的特点:
①成员变量
编译时,参考引用型变量所属的类中是否有调用的成员变量,有,编译通过。没有,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单来说,就是编译和运行都看等号的左边。
②成员函数(非静态)
编译时,参考引用型变量所属的类中是否有调用的函数,有,编译通过。没有,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数,有,运行对象所属的类中的函数。
简单来说,编译看左边,运行看右边。这是因为成员函数的覆盖性所造成的。
③静态函数
编译时,参考引用型变量所属的类中是否有调用的静态函数方法。
运行时,参考引用型变量所属的类中是否有调用的静态函数方法。
简单来说,就是编译和运行都看等号的左边。其实多态性是指的对象的多态性,而对于静态方法是不需要创建对象的,直接类名调用就可以了。
相关文章推荐
- Leetcode|Combination Sum III[回溯]
- Hdu 1 402 FFT 大整数相乘 && Hoj10005
- 设计模式三——单一职责原则
- Jenkins on PaaS
- Newton-Raphson方法
- Service和Thread的关系
- win8.1通过update升级win10的一些问题和思考
- Spring AOP之AspectJ
- Android开源框架(一):AndroidAnnotations
- ucp2p ,一个简单的P2P库
- C++常用容器总结
- C++字符串总结
- 十佳最受欢迎的编程语言,你擅长几个?
- 在Github上搭建自己的博客网站
- 烧钱时代,产品经理该做什么?
- HDOJ 2570 迷瘴(贪心)
- 69. Sqrt(x)
- MySql学习:索引
- [leetcode] permutations的讨论
- C语言 -- 定时关机程序