父类引用指向子类对象
1 public class Test { 2 /** 3 * 对于多态,可以总结它为: 4 5 一、使用父类类型的引用指向子类的对象; 6 7 二、该引用只能调用父类中定义的方法和变量; 8 9 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 10 11 四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。 12 13 多态的3个必要条件: 14 15 1.继承 2.重写 3.父类引用指向子类对象。 16 * @param args 17 */ 18 public static void main(String[] args) { 19 A b = new B(); 20 b.printN();//4 21 b.printM();//4 22 System.out.println(b.n);//0 23 System.out.println(b.m);//0 24 25 B ba = (B)b; 26 ba.printN();//4 27 ba.printM();//4 28 System.out.println(ba.n);//4 29 System.out.println(ba.m);//4 30 31 B bb = new B(); 32 bb.printN();//4 33 bb.printM();//4 34 System.out.println(bb.n);//4 35 System.out.println(bb.m);//4 36 } 37 38 } 39 40 class A{ 41 int n = 0; 42 static int m = 0; 43 public void printN(){ 44 System.out.println(n); 45 } 46 47 public void printM(){ 48 System.out.println(m); 49 } 50 } 51 class B extends A{ 52 int n = 4; 53 static int m = 4; 54 public void printN(){ 55 System.out.println(n); 56 } 57 public void printM(){ 58 System.out.println(m); 59 } 60 }