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

------- <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 plain copy
      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 plain copy
  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.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java作为一种面向对象的编程语言,具有封装、继承和多态这三个重要概念。 首先,封装是指将数据和对数据的操作封装在一个类中,隐藏了实现的细节。通过封装,我们可以将数据的访问权限进行控制,从而保证数据的安全性和完整性。通过提供公共方法,我们可以控制对象对数据的访问方式,使得使用者只能通过指定的方法来访问和修改数据,避免了不恰当的操作。 其次,继承是指子类可以继承父类的属性和方法,可以实现代码的复用。通过继承,我们可以建立类之间的层次关系,并且在子类中可以重写父类的方法,实现对方法的扩展和改进。继承还可以提高代码的可维护性和可扩展性,当需要修改或新增功能时,只需要在相应的子类中进行修改或扩展,而不需要修改所有的类。 最后,多态是指同一个方法可以根据不同的对象产生不同的行为。多态性可以提高代码的灵活性和可扩展性,使代码更易于理解和维护。通过多态,我们可以对不同对象使用相同的方法和接口,使得代码的逻辑更清晰,减少条件判断和重复的代码。 综上所述,封装、继承和多态Java面向对象编程中的重要概念。封装可以保证数据的安全性和完整性,继承可以实现代码的复用和功能的扩展,多态可以提高代码的灵活性和可扩展性。掌握这三个概念,可以帮助我们更好地设计和实现面向对象的程序,提高代码的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值