zoukankan      html  css  js  c++  java
  • java中的多态和继承---"编译看左边,运行看右边"(多态执行)【转】

    老毕的"编译看左边,运行看右边"(多态执行)

    (对面向对象语言中理解多态、继承很有帮助~~~)

    老毕在讲到多态执行问题时,结合下面的例子,给我们总结了一套口诀:“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();

    ),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。

    例:

    class Fu {

     intnum = 5;

    static void method4() {

     System.out.println("fu method_4");

     }

    void method3() {

     System.out.println("fu method_3");

     }

    }

    class Zi extends Fu {

     intnum = 8;

    static void method4() {

     System.out.println("zi method_4");

     }

    void method3() {

     System.out.println("zi method_3");

     }

    }

    class DuoTaiDemo4 {

     public static void main(String[] args) {

    Fu f = new Zi();

     System.out.println(f.num);//与父类一致

     f.method4();//与父类一致

     f.method3();//编译时与父类一致,运行时与子类一致

      Ziz = new Zi();

     System.out.println(z.num);

     z.method4();

     z.method3();

     }

    }

    输出结果:

    5

    fu method_4

    zi method_3

    8

    zi method_4

    zi method_3

    个人分析:

    Fu f = new Zi();----------首先了解变量F到底是什么,把这句子分2段:Fu f;这是声明一个变量f为Fu这个类,那么知道了f肯定是Fu类。然后我们f=newZi();中建立一个子类对象赋值给了f,结果是什么??

    结果是,拥有了被Zi类函数覆盖后的Fu类对象----f------。

    -------------------------------------------也就是说:

    只有子类的函数覆盖了父类的函数这一个变化,但是f肯定是Fu这个类,也就是说f不可能变成其他比如Zi这个类等等(突然f拥有了Zi类特有函数,成员变量等都是不可能的)。所以f所代表的是函数被复写后(多态的意义)的一个Fu类,而Fu类原来有的成员变量(不是成员函数不可能被复写)没有任何变化----------------获得结论:A:成员变量:编译和运行都看Fu。

    但是f的Fu类函数被复写了。--------------获得结论:B:非静态方法:编译看Fu,运行看Zi

    对于静态方法:编译和运行都看Fu!!

    其实很简单,首先我们要理解静态情况下发生了什么?

    ----------------当静态时,Fu类的所有函数跟随Fu类加载而加载了。也就是Fu类的函数(是先于对象建立之前就存在了,无法被后出现的Zi类对象所复写的,所以没发生复写,那么获得:C:静态方法:编译和运行都看Fu。

     
     
  • 相关阅读:
    rpc和http的区别
    Mysql和Oracle的区别
    RabbitMQ基本概念
    如何关闭139端口及445端口等危险端口
    Vert.x入门教程之Hello World
    wordpress常用插件汇总
    wordpress上一款不错的音乐播放器-Hermit
    网易云音乐 – 插入歌单及 HTML5 播放器 WORDPRESS 插件
    WordPress如何在文章或侧边栏通过网易云音乐添加音乐播放器
    HEXO+Github,搭建属于自己的博客
  • 原文地址:https://www.cnblogs.com/efforts-will-be-lucky/p/7118685.html
Copyright © 2011-2022 走看看