黑马程序员技术交流社区

标题: 多态的问题 [打印本页]

作者: 青春灬漫步    时间: 2014-10-16 20:14
标题: 多态的问题
在多态中,成员变量和静态成员函数的特点是什么?
作者: 1198914316    时间: 2014-10-16 20:53
给你一个地址我们俩学习学习吧。讲的挺好。加油。

http://blog.csdn.net/iu_81/article/details/1557323
作者: 青春灬漫步    时间: 2014-10-16 20:57
那感情好啊。多谢啊
作者: nerveva2000    时间: 2014-10-17 10:14
在多态中成员函数的特点:
在编译时期,参阅引用型变量所属的类中是否有调用的方法。
如果有,编译通过。
如果没有,编译失败。

在运行时期,参阅对象所属的类中是否有调用的方法。

简单总结就是:
成员函数在多态调用时,编译看左边,运行看右边。

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

在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。

例子
  1. class Fu  
  2. {  
  3.      int num= 1;  
  4.      void method1()  
  5.      {  
  6.         System.out.println("fu method-1");  
  7.      }  
  8.      void method2()  
  9.      {  
  10.         System.out.println("fu method-2");  
  11.      }  
  12.      static void method4()  
  13.      {  
  14.         System.out.println("fu method-4");  
  15.      }  
  16. }  
  17.   
  18. class Zi extends Fu  
  19. {  
  20.      int num = 2;  
  21.      void method1()  
  22.      {  
  23.         System.out.println("Zi method-1");  
  24.      }  
  25.      void method3()  
  26.      {  
  27.         System.out.println("Zi method-3");  
  28.      }  
  29.      static void method4()  
  30.      {  
  31.         System.out.println("Zi  method-4");  
  32.      }  
  33.   
  34. }  
  35.   
  36. class Test  
  37. {  
  38.     public static void main(String[] args)   
  39.     {  
  40.         Fu f= new Zi();   
  41.         f.method1();    //结果是Zi的method1,覆盖  
  42.         f.method2();    //结果是Fu的method2.  
  43.          
  44.         //num全局变量  
  45.         System.out.println(f.num);  //结果是Fu的num  
  46.         Zi z= new Zi();  
  47.         System.out.println(z.num);  //结果是Zi的num  
  48.          
  49.         //method4() 是静态函数  
  50.         f.method4();    //结果是Fu的method4  
  51.         z.method4();    //结果是Zi的method4  
复制代码

作者: nerveva2000    时间: 2014-10-17 10:15
本帖最后由 nerveva2000 于 2014-10-17 10:19 编辑

简单总结就是:
在多态中,成员函数的特点
编译看左边,运行看右边。

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

在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。

  1. class Test  
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         //Zi extends Fu

  6.                 //method1()是成员函数
  7.                 Fu f= new Zi();   
  8.         f.method1();    //结果是Zi的method1,覆盖  
  9.         f.method2();    //结果是Fu的method2.  
  10.          
  11.         //num全局变量  
  12.         System.out.println(f.num);  //结果是Fu的num  
  13.         Zi z= new Zi();  
  14.         System.out.println(z.num);  //结果是Zi的num  
  15.          
  16.         //method4() 是静态函数  
  17.         f.method4();    //结果是Fu的method4  
  18.         z.method4();    //结果是Zi的method4  
  19.         }
复制代码




作者: 郭.威    时间: 2014-10-18 03:01
我也不太明白这个
作者: HM2014nuli    时间: 2014-10-18 06:31
都只看引用类型那个类,它不会走子类
作者: lypin    时间: 2014-10-18 08:33
楼上有结果了




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