Java中多态的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中多态的理解相关的知识,希望对你有一定的参考价值。

----------------------------------

最近在学习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 }

------------------------------

上面就是我对多态的理

解,如有错误,欢迎大

家指正;感谢阅读;

------------------------------

 

以上是关于Java中多态的理解的主要内容,如果未能解决你的问题,请参考以下文章

[java面试]关于多态性的理解

java8-3 多态的好处和弊端以及多态的理解

理解 Java 的三大特性之多态

java提高篇之理解java的三大特性——多态

Java提高篇之理解java的三大特性——多态

Java多态的理解