前期绑定:程序在编译之前将调用方法绑定,如面向过程的C语言。
后期绑定:程序在运行时决定与哪个方法绑定;如所有面向对象语言。
在java中,static和final是不参与多态的,就是说多态性对static和final描述的成员无效。
代码:
package com.pcitc.pattern.static1;
public class StaticAbstract {
public static String staticVar = "我是父类的静态变量";
public static void printStatic(){
System.out.println("我是父类的静态方法");
}
public void printNoStatic(){
System.out.println("我是父类的非静态方法");
}
}
package com.pcitc.pattern.static1;
public class StaticBean extends StaticAbstract{
public static String staticVar = "我是子类的静态变量";
public static void printStatic(){
System.out.println("我是子类的静态方法");
}
public void printNoStatic(){
System.out.println("我是子类的非静态方法");
}
}
package com.pcitc.pattern.static1;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticAbstract sa = new StaticBean();
System.out.println(sa.staticVar);
sa.printStatic();
sa.printNoStatic();
System.out.println("--------------");
StaticBean sb = new StaticBean();
System.out.println(sb.staticVar);
sb.printStatic();
sb.printNoStatic();
}
}
运行结果:
我是父类的静态变量
我是父类的静态方法
我是子类的非静态方法
--------------
我是子类的静态变量
我是子类的静态方法
我是子类的非静态方法
通过以上代码示例,可得出:sa.printStatic();调用的是父类的静态方法,同StaticAbstract. printStatic(),没有多态。sa.printNoStatic();调用的是子类的方法,是多态。