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 }