2009-07-04 星期六
一直以来,对Java中的多态机制总是不太明白,今天看过Thinking in Java,并Google了一下,现总结如下,但总结的一定不全,也有不对的地方,希望大家指出。
1。多态的两种表现形式
(1)方法重载
发生在同一个类中,同名的但参数类型或参数个数不同的方法。
注:a)重载方法可以有不同的返回类型
b)但不能仅依靠方法返回类型的不同来区分两个同名方法,所以直接可以对重载方法进行区分的是:参数的类型、参数的个数、参数的顺序
(2)方法重写
发生在父类与子类中,在子类中重写了父类/超类中的同名方法,在调用子类的该同名方法时父类中的同名方法将被“屏蔽”
2。多态的实质
(1)运行时刻绑定/动态绑定
(2)向上转型/向下转型(但其运行的原理现在我还不懂,即:向上/下转型的实现原理)
3。多态带来的方法调用顺序
(1)方法调用优先级由高到低:
this.method(O)--->super.method(O)---->
thismethod((super)0)----->super.method((super)0)
(2)SupeerClass sub = new SubClass():情况的讨论
1)对象sub向外暴露的接口全部为超类/父类中的方法,而SubClass中的特有的方法将 被“屏蔽”;
2)若SubClass中重写了SuperClass中的方法,则在调用该方法时,父类中的该方法将被“屏蔽”。
4。多态发生的条件/限制:并不是所有的事物都可以动态地发生的
多态,并不是所有的事物都可有的特性,只有普通方法才会表现出多态性。
1)普通方法:final、static之外的所有方法
2)private方法默认为final类型的方法
3)所有的访问域都是不可多态的
访问域,即:在构造方法之外的定义的所有的成员变量和赋值语句相关的变量,这些变量是在编译时刻就决定了的,所以根本就不会发生所谓的“运行时刻绑定”,所以也就不会发生多态。
如:在SuperClass类中定义了public int age = 0;在SubClass中也定义了public int age = 10,则这个age是无法多态进行的,即:在子类中只有一个age,并且其值为10,而实际情况是:在子类SubClass中有两个age,也就有两份不同的存储,分别是从父类中继承的和自己本身所有,而二者完全没有任何关系。
java两种同态 java中提供两种多态机制
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
分享两种Pulsar消息积压topic级别策略老化办法
本文将介绍如何在topic级别实现老化策略的两种方案。
zookeeper Pulsar 消息中间件 -
两种多态
静态多态:编译时确定(重载) 动态多态:运行时确定(虚函数) ...
多态 虚函数 JAVA -
java 两种缓存
缓存有两种:一、文件缓存,是指把数据存储在磁盘上,可以XML格式,也可以序列化文件DAT格式还是其它文件格式。二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查。
程序语言--------Java 缓存 java java缓存 键值