黑马程序员——Java基础---多态、内部类、

原创 2015年07月10日 10:43:31

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

 

一、多态(Polymorphism)
  • 概念:一种事物的多种表现形态。如:一个人,这个人可以是学生,也可以是运动员。
  • 体现:父类引用或者接口的引用指向了自己的子类对象。父类的引用也可以接受自己的子类对象。//Animal a = new Cat();
  • 多态的好处:提高了程序的扩展性。
  • 多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
  • 多态的前提:
    1. 必须要有关系,比如继承、或者实现。
    2. 通常会有覆盖操作。
  • 多态的出现思想上也做着变化:
    • 以前是创建对象并指挥对象做事情。
    • 有了多态以后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或接口实现。
      [java] view plaincopy
      1. class 毕姥爷{  
      2.     void 讲课(){  
      3.         System.out.println("企业管理");  
      4.     }  
      5.     void 钓鱼(){  
      6.         System.out.println("钓鱼");  
      7.     }  
      8. }  
      9. class 毕老师 extends 毕姥爷{  
      10.     void 讲课(){  
      11.         System.out.println("JAVA");  
      12.     }  
      13.     void 看电影(){  
      14.         System.out.println("看电影");  
      15.     }  
      16. }  
      17. class {  
      18.     public static void main(String[] args) {  
      19.         毕姥爷 x = new 毕老师(); //毕老师对象被提升为了毕姥爷类型。   
      20. //      x.讲课();  
      21. //      x.看电影();  //错误.  
      22.         毕老师 y = (毕老师)x; //将毕姥爷类型强制转换成毕老师类型。   
      23.         y.看电影();//在多态中,自始自终都是子类对象在做着类型的变化。  
      24.     }  
      25. }  
  • 如果想用子类对象的特有方法,如何判断对象是哪个具体的子类类型呢?
  • 可以可以通过一个关键字 instanceof ;//判断对象是否实现了指定的接口或继承了指定的类
  • 格式:<对象 instanceof 类型> ,判断一个对象是否所属于指定的类型。
  • Student instanceof Person = true;//student继承了person类
多态在子父类中的成员上的体现的特点:
  1. 成员变量:在多态中,子父类成员变量同名。
    • 在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象,只检查语法错误)
    • 运行时期:也是参考引用型变量所属的类中是否有调用的成员。
    • 简单一句话:无论编译和运行,成员变量参考的都是引用变量所属的类中的成员变量。
    • 再说的更容易记忆一些:成员变量 --- 编译运行都看 = 左边。
  2. 成员函数。
    • 编译时期:参考引用型变量所属的类中是否有调用的方法。
    • 运行事情:参考的是对象所属的类中是否有调用的方法。
    • 为什么是这样的呢?因为在子父类中,对于一模一样的成员函数,有一个特性:覆盖。
    • 简单一句:成员函数,编译看引用型变量所属的类,运行看对象所属的类。
    • 更简单:成员函数 --- 编译看 = 左边,运行看 = 右边。
  3. 静态函数。 
    • 编译时期:参考的是引用型变量所属的类中是否有调用的成员。
    • 运行时期:也是参考引用型变量所属的类中是否有调用的成员。
    • 为什么是这样的呢?因为静态方法,其实不所属于对象,而是所属于该方法所在的类。
    • 调用静态的方法引用是哪个类的引用调用的就是哪个类中的静态方法。
    • 简单说:静态函数 --- 编译运行都看 = 左边。
 示例:
[java] view plaincopy
  1. class Fu  
  2. {  
  3.     int num = 5;  
  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 = 8;  
  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. class  DuoTaiDemo3  
  35. {  
  36.     public static void main(String[] args)   
  37.     {  
  38.         Fu f = new Zi();  
  39.         System.out.println(f.num);  
  40.         Zi z = new Zi();  
  41.         System.out.println(z.num);  
  42.         f.method1();  
  43.         f.method2();  
  44.         f.method4();  
  45.         z.method4();  
  46.         //f.method3();编译失败。父类中没有method3方法。  
  47.         /* 
  48.         结果: 
  49.         5 
  50.         8 
  51.         zi method_1 
  52.         fu method_2 
  53.         fu method_4 
  54.         zi method_4 
  55.         */  
  56.         /* 
  57.         Zi z = new Zi(); 
  58.         z.method1(); 
  59.         z.method2(); 
  60.         z.method3(); 
  61.         结果: 
  62.         zi method_1 
  63.         fu method_2 
  64.         zi method_3 
  65.         */  
  66.     }  

黑马程序员——Java语言基础:多态、内部类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、多态 1.概念:可以理解为事物存在的多种体现形式。    例:动物:猫、狗  创建对象...

黑马程序员——java基础--多态、内部类、异常、包

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流----- 一、多态 1、概述   什么是多态?某一事物在不同时刻表现出来的不同状态。 如:猫可以是猫的类型。...

黑马程序员——Java基础---多态、内部类、异常、包

第一讲     多态         多态可以理解为事物存在的多种体现形态。         例:动物中猫,狗。猫这个对象对应的类型是猫类型,如:猫 x = new猫(); 同时猫也是动物...

黑马程序员——Java基础--多态、内部类、异常

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 多态、内部类、异常 一、多态 1、多态:可以理解为事物存在的多种体现形态。 例:动物...

黑马程序员——javase基础--多态、内部类、异常

——- android培训、java培训、期待与您交流! ———- 第一讲 多态 多态可以理解为事物存在的多种体现形态。 一、多态的体现 1、父类的引用指...

黑马程序员--java基础--多态,内部类,异常等

------- android培训、java培训、期待与您交流! --------- 多态: 允许不同类的对象对同一消息作出响应 1.多态的体现 父类的引用指向自己的子类对象 父类的引用也可以接受...
  • omg_94
  • omg_94
  • 2014年12月03日 16:43
  • 220

黑马程序员————Java基础部分之多态、内部类、异常

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、多态 定义:某一种事物的多种存在形态。 例如:动物中猫和狗,猫和狗都属于动物,我们既可以叫...

黑马程序员--java基础复习之多态与Object及匿名内部类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 多态 定义:某一类事物的多种存在形态 例如:动物中的猫、狗。猫这个对象对应的类型是猫...

黑马程序员 Java基础<二>---> 继承、内部类与多态,包

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 第一节   继承 当两个事物之间存在一定的所属关...

黑马程序员—【Java基础篇】之多态、内部类、异常及包

------- android培训、java培训、期待与您交流! ---------     大家好,这篇我们介绍和学习多态、内部类、异常和包的4大块知识点。 一、多态 1、定义     某一类...
  • WL8721
  • WL8721
  • 2015年04月22日 16:59
  • 496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java基础---多态、内部类、
举报原因:
原因补充:

(最多只允许输入30个字)