Java中多态的理解
多态,就是指一个对象在
不同时候体现出来的不同
状态;
----------------------------------
多态的实现要有3个前提:
1.要有继承关系;
2.要有方法重写;
3父类引用指向子类对象;
即 父 f = new 子();
----------------------------------
多态的成员访问特点:
1.成员变量:
编译看左边,运行看左边;
2.静态成员变量:
覆盖父类的值;
3.构造方法:
创建子类对象的时候,访问父类的构造方法,对父类的数据初始化;
4.成员方法:
编译看左边,运行看右边;(即父类和子类都有该方法,否则就报错,运行时是调用用子类的方法)
5.静态成员方法:
编译看左边,运行看左边;
----------------------------------
总结:
只有重写后才会使用子类
的方法;静态方法与类有
关(通过类名加“.”访问)
,算不上重写,所以父类的
静态方法不会被覆盖;成
员变量和静态成员变量不
存在重写,所以不会被覆盖;
所以只有成员方法才会调
用子类的方法。
----------------------------------
下面给出一个实例来说明:
1 public class DuoTai {
2 public static void main(String[] args) {
3
4 Fu f = new Zi();//fu,zi //这里是多态
5 System.out.println(f.num); //100(fu的值)
6 System.out.println(f.a); //300(fu的值)
7 //System.out.println(f.b); //不能访问子类独有(父类没有)的成员变量;ERROR
8 f.method(); //child //动态成员方法
9 f.fun(); //Fu //静态成员方法
10 System.out.println();
11
12 Zi z = new Zi();//fu,zi //这里是普通的对象创建方法
13 System.out.println(z.num); //200(zi的值)
14 System.out.println(z.a); //400(zi的值)
15 System.out.println(z.zi); //500
16 z.method(); //child
17 z.fun(); //Zi
18 System.out.println();
19
20 Fu m = new Fu();//zi //这里是普通的对象创建方法
21 System.out.println(m.num); //100(fu的值)
22 System.out.println(m.a); //300(fu的值)
23 m.method(); //father
24 m.fun(); //Fu
25 }
26 }
27 class Fu{
28 public int num = 100; //fu的成员变量
29 public static int a = 300; //fu的静态成员变量
30 public Fu(){ //fu的构造方法
31 System.out.println("fu");
32 }
33 public void method(){ //fu的成员方法
34 System.out.println("father");
35 }
36 public static void fun(){ //fu的静态成员方法
37 System.out.println("Fu");
38 }
39 }
40 class Zi extends Fu{
41 public int num = 200; //zi的成员变量
42 public static int a = 400; //zi的静态成员变量
43 public int b = 500; //zi的成员变量(独有的)
44 public Zi(){ //zi的构造方法
45 System.out.println("zi");
46 }
47 public void method(){ //zi的成员方法
48 System.out.println("child");
49 }
50 public static void fun(){ //zi的静态成员方法
51 System.out.println("Zi");
52 }
53 }


浙公网安备 33010602011771号