A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨习平 中级黑马   /  2012-9-11 01:55  /  1252 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨习平 于 2012-9-11 01:57 编辑

遇到一题目,表示用代码体现多态在成员函数和静态函数上的特点? 、
没思路,求高手讲解说明?

3 个回复

倒序浏览
多态中
              非静态成员函数  编译看左边,运行看右边(动态绑定对象)
    成员变量  编译运行都看左边
   静态成员函数    编译运行都看左边(静态绑定类)

给你个例子

class Fu {
        int num = 5;
        void method1() {
                System.out.println("fu method_1");
        }
        void method2() {
                System.out.println("fu method_2");
        }
        static void method3() {
                System.out.println("fu method_3");
        }
}       
class Zi extends Fu {
        int num = 8;
        void method1() {
                System.out.println("zi method_1");
        }
        static void method3() {
                System.out.println("zi method_3");
        }
}
public class C{
        public static void main(String args[]) {
                Fu f = new Zi();
               
                System.out.println(f.num);//5
                             多态中成员变量的特点,
                                 无论编译和运行,都参考左边(引用变量所属的类)

                f.method1();  //zi method_1//覆盖
                f.method2();  //fu method_2
                                     多态中非静态函数的特点,
                                  在编译时期:参阅引用类型变量所属的类中是否调用的方法,如有,编译通过,如没有,编译失败
                                    在运行时期:参阅对象所属的类中是否有调用的方法
                                       简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边

                f.method3();  //fu method_3
                          在多态中,静态成员函数的特点,
                           无论编译和运行,都参考左边
                当静态方法一进内存,就已经绑定在所属的类上了(静态绑定)
        }
}


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败。
  在运行期间;参阅对象所属类中是否有调用的方法。
  简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。



  在多态中,成员变量的特点:
  无论编译和运行,都参考左边(引用类型变量所属的类)。



  在多态中,静态成员函数的特点;
  无论编译和运行,都参考左边(引用类型变量所属的类)。

  Fu f= new zi();
  f(左边).method(右边)4();
回复 使用道具 举报
thank you! finished.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马