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、对于静态方法,因为在编译时就决定了它的执行顺序,所以程序运行时执行强制转换后对象的静态方法。

05-11 13:42