多态与类型转化原理分析:
一、多态性:超类(即基类或父类)引用在运行时既能代表超类本身的对象,也能代表其子类(即派生类)的对象的能力。 类的一个成员若想表现多态必须可以被覆盖: 对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征; 在成员方法中,静态方法和final方法(或private方法,理由:很多人说因为private方法默认是final的,但或者有疑问:请参http://blog.csdn.net/ZangXT/archive/2009/09/03/4514031.aspx)也不会发生覆盖现象(会隐藏),因此也不会表现多态性。 因此只有除静态方法和final方法以外的方法才会表现多态性。
二、向上类型转化时: 丢失添加的方法和字段,剩余的为: 基类字段 基类静态方法或final方法 //前二者为不能被覆盖的成员,因此保留,无多态性 基类其他方法(若被子类覆盖则为子类覆盖的新方法)
package test3;
class oopsuper {
static String str = "父类字段";
public void publicMethod(){System.out.println("父类public方法");}
protected void protectedMethod(){System.out.println("父类protected方法");}//(1)
private void privateMethod(){System.out.println("父类private方法");}
static void staticMethod(){System.out.println("父类静态方法"); }
}
public class oopsub extends oopsuper {
String str = "子类字段";
public void publicMethod(){System.out.println("子类public方法");}
protected void protectedMethod(){System.out.println("子类protected方法");}//(2)
private void privateMethod(){System.out.println("子类private方法");}
static void staticMethod(){System.out.println("子类静态方法"); }
public static void main(String[] args) {
oopsuper upcast = new oopsub();
System.out.println(upcast.str);//方法调用才具有多态性,而域没有多态性
// 能被覆盖的方法的行为才有多态特性
upcast.publicMethod();
upcast.protectedMethod();
// 不能被覆盖的方法[final方法(含私有方法)、静态方法]的行为不具有多态特性
// upcast.privateMethod();访问的是父类的私有方法,不能访问,不具有多态现象
upcast.staticMethod();
}
}
ps:关于JVM的内存机制介绍,请参见http://wenku.baidu.com/view/69d80ca1b0717fd5360cdc23.html
关于父类subobject:这东西很让人头疼,请参见《深度探索C++对象模型》
英文好的请参见http://www.csci.csusb.edu/dick/c++std/cd2/derived.html
|
本文来自: http://hi.baidu.com/zhonghuage/blog/item/87b5c4eadd9c87ded539c905.html
分享到:
相关推荐
Java 多态中的类型转换
java多态、继承练习题,包含题目与答案,............................................................................................................
Java多态的讲解
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
JAVA多态图文详解ppt,详细通过各种举例介绍JAVA多态的ppt
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
java的多态,是一个很重要的环节.但是要知道什么是多态!
利用大量代码讲解java的多态,让你更容易理解和应用。
C++和Java多态的区别
本文带您通过几个类的示例和讲解来理解Java多态性,Java多态性的概念也可以被说成“一个接口,多个方法
【Java面试题】谈谈对Java多态的理解
java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用
java教学视频,讲解了多态的扩展性、转型、成员特点、主板实例、object类等
java 的多态是java的重要的四大特性之一,多态又有多少人真正说的清楚呢?这里有最经典的例子,最生动的最鲜活的例子讲解,相信你一定能学会
关于java多态性和abstract修饰的使用 一个具体的实例 简单易懂
该资料,是一个多态的例子,充分的掌握多态,让多态得到很好的应用
本文精选了20道高难度的Java多态性面试题,并提供详细的答案解析,涵盖了多态性的概念、实现方式、绑定类型、重写与重载的区别等关键知识点。通过深入理解和掌握Java多态性,可以提升面试者的编程能力和解决问题的...
RTRTRTRTRT 多态的泛型实现 急需积分...
JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型
从虚拟机角度看Java多态->(重写override)的实现原理