Java 中的多态机制

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,也就有两份不同的存储,分别是从父类中继承的和自己本身所有,而二者完全没有任何关系。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值