class BaseClass { public int book = 6; public void base() { System.out.println("父类的普通方法"); } public void test() { System.out.println("父类的被覆盖的方法"); } } public class SUbClass extends BaseClass { public String book = "轻量级J2ee"; public void test() { System.out.println("子类的被覆盖的方法"); } public void sub() { System.out.println("子类的普通方法"); } public static void main(String[] args) { //BaseClass 编译时类型;SUbClass 运行时类型 BaseClass ploymophicbc =new SUbClass(); System.out.println(ploymophicbc.book); ploymophicbc.base(); //调用该引用时变量test方法,父类定义了该方法,子类覆盖了该方法,这就是多态 //当运行时调用该引用变量的方法时,其方法的行为总是像子类方法的行为而不是父类方法行为,
// 这将出现相同类型的变量,执行同一个方法呈现出不同的行为特征,这就是多态 ploymophicbc.test(); //以下就错误,因为应用变量在编译阶段只能调用编译是类型所具有方法,
// 但运行时执行它运行时类型所具有的方法, //因此编写Java代码时,引用变量只能调用声明该变量时所使用类里包含的方法, //ploymophicbc只能调用BaseClass中的方法 // ploymophicbc.sub(); }