黑马程序员——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培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1433

黑马程序员——Java基础---练习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础---练习题 1.写出程序结果class Demo { public stat...
  • liu007004
  • liu007004
  • 2015年01月19日 16:35
  • 704

黑马程序员--Java基础面试题整理

------- android培训、java培训、期待与您交流! Java面试题整理(自己学习过程中整理的重点题目,为面试做准备) 编程基础 1.(面试题): ...
  • wwj101004
  • wwj101004
  • 2014年10月31日 23:09
  • 819

java之匿名内部类中的多态

接口,抽象类以匿名内部类实现多态
  • zahngjialiang
  • zahngjialiang
  • 2017年04月01日 17:36
  • 697

Java基础---多态、内部类、包 (黑马程序员)

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

传智 刘意 2015年Java基础视频-深入浅出精华版 笔记 day24~day26(2016年4月26日13:11:30)

day24 1.多线程(JDK5之后的Lock锁的概述和使用)   Lock:           void lock(): 获取锁。           void unlock():释放锁。 ...
  • juliantem
  • juliantem
  • 2016年04月15日 00:40
  • 5028

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

一、多态 1.概念:某一事物的多种表现形态 2.程序的体现: 父类或接口的引用可以指向自己的子类对象 父类或接口的引用可以接受自己的子类对象 例如: /* 猫和狗都属于动物,是动物的两种不同表现形式...
  • lmxfxm
  • lmxfxm
  • 2015年07月17日 21:15
  • 196

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

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 第一讲     多态 多态可以理解为事物存在的多种体现形态。 例:动物中猫,狗。...
  • kangmiao89757
  • kangmiao89757
  • 2013年08月30日 23:55
  • 4277

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

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

黑马程序员-java基础-面向对象-多态和内部类

-------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------- 多态 1、含义:父类的引用指...
  • u014157368
  • u014157368
  • 2014年03月27日 21:12
  • 208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java基础---多态、内部类、
举报原因:
原因补充:

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