黑马程序员技术交流社区

标题: 多态在成员函数和静态函数上的特点? [打印本页]

作者: 杨习平    时间: 2012-9-11 01:55
标题: 多态在成员函数和静态函数上的特点?
本帖最后由 杨习平 于 2012-9-11 01:57 编辑

遇到一题目,表示用代码体现多态在成员函数和静态函数上的特点? 、
没思路,求高手讲解说明?
作者: 王陶成    时间: 2012-9-11 09:39
多态中
              非静态成员函数  编译看左边,运行看右边(动态绑定对象)
    成员变量  编译运行都看左边
   静态成员函数    编译运行都看左边(静态绑定类)

给你个例子

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
                          在多态中,静态成员函数的特点,
                           无论编译和运行,都参考左边
                当静态方法一进内存,就已经绑定在所属的类上了(静态绑定)
        }
}



作者: 田旭阳    时间: 2012-9-11 18:37
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败。
  在运行期间;参阅对象所属类中是否有调用的方法。
  简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。



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



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

  Fu f= new zi();
  f(左边).method(右边)4();

作者: 杨习平    时间: 2012-9-11 21:58
thank you! finished.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2