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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mayer 中级黑马   /  2016-1-27 13:40  /  428 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态:可以理解为事物存在的多种体现形态。
----------------------------------
        1,多态的体现
                父类的引用指向了自己的子类对象。               
                //动物 x = new ();
----------------------------------
        2,多态的前提
                1) 必须是类与类之间有关系。要么继承(extends),要么实现(implements)。
                2) 通常还有一个前提:存在覆盖(重写)。
3)父类引用指向自己的子类对象
----------------------------------
        3,多态的好处
                预先定义的程序可以运行后期程序的内容。
                多态的出现大大的提高程序的扩展性。
----------------------------------
        4,多态的弊端:
                虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。不能预先使用子类中定义的特有功能。
----------------------------------
        5,多态的应用
        在多态中成员函数的特点:
        1)对于成员函数:// class Fu{}    class Zi extends Fu{}    Fu f = new Zi(); f.method();  
        编译时期:看左边。
        运行时期:看右边。
        在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
        在运行时期:参阅对象所属的类中是否有调用的方法。
        2)        在多态中,成员变量(静态成员变量)的特点:
            无论编译和运行,都参考左边(引用型变量所属的类)
  1. public class DuoTai {

  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. Fu f = new Zi();
  5. System.out.println("num="+f.num+",num1="+f.num1);
  6. }

  7. }
  8. class Fu
  9. {
  10. int num = 6;
  11. static int num1 = 7;
  12. }


  13. class Zi extends Fu
  14. {
  15. int num = 88;
  16. static int num1 = 99;
  17. }
复制代码


[size=10.5000pt]3)静态函数:java的静态函数和对象无关,只和声明的类有关,静态函数由类直接引用。
  1. class Fu
  2. {
  3. void method1()
  4. {
  5. System.out.println("fu method_1");
  6. }
  7. void method2()
  8. {
  9. System.out.println("fu method_2");
  10. }
  11. static void method4()
  12. {
  13. System.out.println("fu method_4");
  14. }
  15. }


  16. class Zi extends Fu
  17. {
  18. void method1()
  19. {
  20. System.out.println("zi method_1");
  21. }
  22. void method3()
  23. {
  24. System.out.println("zi method_3");
  25. }

  26. static void method4()
  27. {
  28. System.out.println("zi method_4");
  29. }
  30. }
  31. class  DuoTaiDemo4
  32. {
  33. public static void main(String[] args)
  34. {
  35. //        Fu f = new Zi();
  36. //
  37. //        System.out.println(f.num);
  38. //
  39. //        Zi z = new Zi();

  40. //f.method1();
  41. //f.method2();
  42. //f.method3();

  43. Fu f = new Zi();
  44. f.method4();

  45. Zi z = new Zi();
  46. z.method4();
  47. }
  48. }
复制代码


4)向下转型
  1. class Fu{}

  2. class Zi  extends Fu{}
  3. Fu  fu= new Zi();   //Zi向上转型为了Fu。向上转型,一般多态都采用这种。

  4. Zi  zi = (Zi)fu;    //将代表Zi对象的父类引用fu强制转换成了Zi类型。向下转型。
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马