黑马程序员技术交流社区

标题: 多态学习总结 [打印本页]

作者: 小狼    时间: 2013-8-23 22:21
标题: 多态学习总结
本帖最后由 小狼 于 2013-8-23 22:23 编辑

1.JAVA引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋值给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

2.相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。
  与方法不同的是,对象的Field则不具备多态性。

3.引用变量在编译时只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法,因此,编写JAVA代码时,引用变量只能调用声明该变量时所用类里的方法,例如:Object p = new Person();
4.代码定义了一个变量p,则这个p只能调用Object类的方法,而不能调用person类里定义的方法。
通过引用变量来访问其包含的实例Field时,系统会试图访问它编译时类型所定义的Field,而不是它运行时类型所定义的Field
举例:
  1. class BaseClass
  2. {
  3.      public int book = 6;
  4.      public void base()
  5. {
  6. System.out.println("父类的普通方法");
  7. }
  8.      public void test()
  9. {
  10.      System.out.println("父类的被覆盖的方法");
  11. }
  12. }
  13.      public class SubClass extends BaseClass
  14. {
  15.      //重新定义一个book实例Field隐藏父类的book实例Field
  16.      public String book = "轻量级Java EE企业应用实战";
  17. public void test()
  18. {
  19.      System.out.println("子类的覆盖父类的方法");
  20. }
  21. public void sub()
  22. {
  23.      System.out.println("子类的普通方法");
  24. }
  25. public static void main(String[] args)
  26. {
  27.      //下面编译时类型和运行时类型完全一样,因此不存在多态
  28.      BaseClass bc = new BaseClass();
  29.      //输出 6
  30.      System.out.println(bc.book);
  31.      //下面两次调用将执行BaseClass的方法
  32.      bc.base();
  33.      bc.test();
  34.      //下面编译时类型和运行时类型完全一样,因此不存在多态
  35.      SubClass sc = new SubClass();
  36.      //输出"轻量级J2EE企业应用实战"
  37.      System.out.println(sc.book);
  38.      //下面调用将执行从父类继承到的base方法
  39.      sc.base();
  40.      //下面调用将执行从当前类的test方法
  41.      sc.test();
  42.      //下面编译时类型和运行时类型不一样,多态发生
  43.      BaseClass ploymophicBc = new SubClass();
  44.      //输出 6 —— 表明访问的是父类Field
  45.     System.out.println(ploymophicBc.book);
  46.      //下面调用将执行从父类继承到的base方法
  47.     ploymophicBc.base();
  48.     //下面调用将执行从当前类的test方法
  49.     ploymophicBc.test();
  50.     //因为ploymophicBc的编译类型是BaseClass,
  51.      //BaseClass类没有提供sub方法,所以下面代码编译时会出现错误。
  52.      //ploymophicBc.sub();
  53.   }
  54. }
复制代码

作者: 潘才新    时间: 2013-8-25 13:40
鼓励总结,有助知识巩固




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