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 }
复制代码
posted @ 2019-05-14 17:40  天涯海角路  阅读(224)  评论(0)    收藏  举报