java编程思想——Java中的动态、静态绑定(前期、后期绑定)

概念:

方法可以在沿着继承链的多个类中实现,子类可以重写父类的方法。JVM决定运行时调用哪个方法。这就是动态绑定。

1、将一个方法调用同一个方法主体关联起来被称作绑定。

2、若程序在执行前进行绑定,由编译器和链接程序实现,叫做前期绑定。C语言中只有一种方法调用,就是前期绑定。

3、在运行时根据对象的类型进行绑定,叫做后期绑定,也叫动态绑定运行时绑定,反之叫做前期绑定,也叫静态绑定

4、Java中除了static方法和final方法(private方法被自动认为是final方法)之外,其他所有的方法都是后期绑定

这句话很重要,在我们使用多态时,即将子类对象赋给父类引用时,通过父类引用调用某一方法。这个时候就会出现“方法调用绑定”问题 (这是面向对象程序设计的最重要的妙诀) 。如果此方法不是static或者final(private)的,那么绑定是后期绑定,即在编译时(在编译期,只是确保调用方法的存在,并对调用参数和返回值执行类型检查),方法调用和方法体没有关联起来,只要到了运行时,根据引用所指向的对象类型,将方法调用和方法体关联起来。在这个过程中有许多值得注意的地方。

  • 父类中有一个方法f(),如果子类中Override(覆写)了父类的f()方法,那么在运行期方法调用关联到的方法体是子类中的f()
  • 如果子类没有Override父类的f(),那么在运行期方法调用关联到的方法体是子类从父类中继承过来的f()。
  • 大家有没有想过一种情况:假如父类中没有f()方法,子类中有,在多态中,方法调用f()时,会出现什么情况呢?其实大家可以做一下实验,结果就是会编译出错!其实很好理解,因为在编译期,编译器只知道,父类引用调用了f()方法,如果父类中没有f()方法,当然会编译出错呀!

一般情况说完了,说一下特殊的情况,关于final的,首先看一下下面的例子:

package com.sailang.polymorphism;
 
public class PrivateOverride
{
   
	private void f()
	{
   
		System.out.println("private f()");
	}
	
	public 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值