多态中,成员特色
1.成员变量(编译运行全看父类):
编译的时候, 参考父类中有没有这个变量,若是有,编译成功,没有编译失败
运行的时候, 运行的是父类中的变量值
2.成员方法( 编译看父类,运行看子类):
编译的时候, 参考父类中有没有这个方法,若是有,编译成功,没有编译失败
运行的时候, 运行的是子类的重写方法java
特例:调用静态成员方法时,运行看父类。缘由:静态属于类,不属于对象。不new对象,也可调用父类的静态方法,直接用类名调用。测试
父类spa
package Static_user; public class Fu { int a = 1; static int b = 1;//静态变量 public void show1(){ System.out.println("父类的方法show1"); } //静态方法 public static void show2(){ System.out.println("父类的静态方法show2"); } }
子类code
package Static_user; public class Zi extends Fu { int a = 2; static int b = 2;//静态变量 public void show1 (){ System.out.println("子类的方法show1"); } //静态方法 public static void show2(){ System.out.println("子类的静态方法show2"); } }
测试类对象
package Static_user; /* * 多态运行中,编译看谁,运行看谁 * 编译都看 = (等号)左边的父类,父类又编译成功,没有编译失败 * 运行时,成员变量,运行的全是父类的 * 运行时,静态方法,运行父类的静态方法 * 运行时,非静态方法,运行子类的重写方法 * */ public class Test { public static void main(String[] args) { Fu f = new Zi(); System.out.println("a="+f.a); f.show1(); System.out.println("b="+f.b); /* * 调用的仍是父类的静态方法 * 缘由:静态属于类,不属于对象。不new对象,也可调用父类的静态方法,直接用类名调用 * 对象的多态性,静态与对象无关 */ f.show2(); } }
运行结果:编译
a=1 子类的方法show1 b=1 父类的静态方法show2