JAVA中联编有两种,一种是动态联编,一种是静态联编。

动态联编:也叫多态联编或者是迟后联编,因为到底要调用哪一个函数,在编译时不能确定,而要推迟到运行中确定。也就是说,要等到程序运行时,确定了指针所指向对象的类型时,才能够确定。

静态联编:静态联编是指联编工作出现在编译连接阶段,这种联编又称作早期联编,因为这种联编工作是程序开始运行之前完成的。

静态联编的条件:类方法(静态方法),类变量(静态类型变量)。

EXM:

public class Par_Test{  //基类

public static int i=4;

public Par_test(){   //构造函数

System.out.println(" Par_Test initialzed ");

}

public void write(){  //动态联编

System.out.println(" Par_Test write  "+i);

}

public static void writeStatic(){  //静态方法测试  静态联编

System.out.println(" Par_Test writeStatic  "+i);

}

}

public class Chi_Test extends Par_Test{  //子类

public static int i=5;

public Chi_Test(){ //构造函数

System.out.println(" Chi_Test initialized ");

}

public void write(){  //动态联编

System.out.println(" Chi_Test write  "+i);

}

public static void writeStatic(){  //静态方法测试 静态联编

System.out.println(" Chi_Test writeStatic "+i);

}

}

public class Test{

public static void main(String[] pars){

Pra_Test test = new Chi_Test(); //测试初始化构造函数顺序

test.write();   //测试动态联编

test.writeStatic();   //  测试静态联编

}

}

程序执行结果:

Par_Test initialized;

Chi_Test initialized;

Chi_Test write 5;

Par_Test writeStatic 4;

由程序运行结果可以看出:

1、在构造一个子类对象时,先调用其父类的构造函数,再执行本类构造函数。

2、对于一般的方法即使把子对象强制转换成父类对象,程序运行时执行子类中的方法。

3、对于静态方法,因为在编译时就决定了它的执行顺序,所以程序运行时执行强制转换后对象的静态方法。

java动态联编的更多相关文章

  1. C++构造函数和析构函数调用虚函数时都不会使用动态联编

    先看一个例子: #include <iostream> using namespace std; class A{ public: A() { show(); } virtual void ...

  2. C++的静态联编和动态联编

    联编的概念 联编是指一个计算机程序自身彼此关联的过程,在这个联编过程中,需要确定程序中的操作调用(函数调用)与执行该操作(函数)的代码段之间的映射关系. 意思就是这个函数的实现有多种,联编就是把调用和 ...

  3. c++知识点总结--静态与动态联编

    静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型   动态联 ...

  4. C++基础之多态性和动态联编

    (1)多态性是指相同的函数名对应不同的实现.多态性采用两种方式:重载方式和覆盖方式.重载方式表现在函数重载和运算符重载:覆盖方式表现在基类与派生类中相同说明的函数.(2)函数重载要求被重载的函数应该在 ...

  5. C++的静态联编和动态联编详解

    一.概述: 通常来说联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程.按照联编所进行的 ...

  6. 初学c++动态联编

    先看一下什么是C++联编? 我觉得通俗的讲,用对象来访问类的成员函数就是静态联编. 那什么是动态联编: 一般是通过虚函数实现动态联编. 看一个动态联编的例子: 我比较懒,所以直接粘贴了MOOC视频的图 ...

  7. C++ 多态、虚函数(virtual 关键字)、静态联编、动态联编

    函数重写:(在子类中重写父类中的函数) 父类中被重写的函数  依然会继承  给子类. 子类中重写的函数将覆盖父类中的函数. 通过作用域分辨符  ::  可以访问到父类中的函数. 例如: #includ ...

  8. C++迟后联编和虚函数表

    先看一个题目: class Base { public: virtual void Show(int x) { cout << "In Base class, int x = & ...

  9. C++_类继承3-动态联编和静态联编

    程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题. 将源代码中的函数调用解释为特定的函数代码块被称为函数名联编(binding). 在C语言中,这非常简单,因为每个函数名对应一个不同的 ...

随机推荐

  1. C++的那些事:表达式与语句

    表达式 1,应该把函数调用当作是一种运算符,这种运算符对参与运算的对象没有数量限制. 2,关于“左值(lvalue)”和“右值(rvalue)”可以做一个简单的归纳:当一个对象被用作右值的时候,用的是 ...

  2. php:订单号和时区

    1.php制作订单号 $data['orderid'] = date("YmdHis") . settype(rand(100000, 999999), string) ; 2.p ...

  3. 不能继承OrmLiteBaseActivity时,这样获取getHelper

    private DatabaseHelper databaseHelper = null; public DatabaseHelper getHelper() { if (databaseHelper ...

  4. Hark的数据结构与算法练习之地精(侏儒)排序

    算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...

  5. Burpsuite教程与技巧之HTTP brute暴力破解

    Burpsuite教程与技巧之HTTP brute暴力破解 Gall @ WEB安全 2013-02-28 共 19052 人围观,发现 32 个不明物体收藏该文 感谢Gall投递 常规的对usern ...

  6. ember.js:使用笔记8 加载测试与集成测试

    emberjs使用的测试工具为qunit.js: 加载:将runner.js添加到Index.html:大致内容: if (window.location.search.indexOf("? ...

  7. Xamarin Anroid App访问网站失败

    Xamarin Anroid App访问网站失败 错误信息:net::ERR_NAME_NOT_RESOLVED如果电脑同时有有线网卡和无线网卡,电脑使用无线网卡上网,而有线网卡不上网.这时,就会出现 ...

  8. Xamarin iOS编写第一个应用程序创建工程

    Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的 ...

  9. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  10. Beat the Spread![HDU1194]

    Beat the Spread! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...