黑马程序员技术交流社区

标题: 面向对象的多态问题 [打印本页]

作者: 程玉习    时间: 2014-1-2 22:14
标题: 面向对象的多态问题
面向对象的多态有几种类型啊。。。晕了,求大婶解答,越详细好!

作者: 流浪的风    时间: 2014-1-2 22:22
多态就是继承方面的理解,就是父类动态指向子类的相同方法,即子类覆盖父类的方法,这就是多态,父类的方法被覆盖了就会执行子类的方法,
作者: 诺忔。初禾、    时间: 2014-1-2 22:24
有两种,向上类型转换(子类转父类)和向下类型转换(父类转子类)
作者: 净坛使者    时间: 2014-1-2 22:32
1、 抽象类的语法:                           访问修饰符 abstrac class 类名         2、 父类中的方法:                           访问修饰符 abstrac 返回类型 方法();  注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。           抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。           抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。      3、重写抽象方法:                            访问修饰符 override 返回类型 方法()       4、使用场合:                         A 父类提供了一个功能或者规定,约束子类的行为
作者: ztwztw    时间: 2014-1-3 15:03
父类或者接口的引用指向子类或者所实现对象
作者: 午夜b'Boy    时间: 2014-1-3 17:48
多态,动物 》》肉食动物》》老虎。可以理解为继承关系,这时老虎既可以用:肉食动物:来称呼他
也可以用:动物:来称呼他,即所谓的向上转型

一个对象,可以由多种  父类变量引用也是多态的一种表现
作者: 肖银    时间: 2014-1-3 18:07
这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.

面向对象的多态
多太就是事物(对象)的多种表现形态
父类指向子对象
多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象
多态的弊端:只能访问父类的功能,无法使用子类特有的功能.
:
  1. Class animal

  2. {

  3. Abstract void eat();

  4. Abstract void sleep();

  5. }

  6. Class cat()

  7. {

  8. ......

  9. }

  10. Class dog()

  11. {

  12. ......

  13. }

  14. Class test

  15. {

  16. Public static void main(String[] args)

  17. {

  18. Dog d =  new dog();

  19. Method(d);



  20. }

  21. Public static void Method (animal a)

  22. {

  23.     A.ect();

  24. A.sleep();

  25. }

  26. }
复制代码

多态中的类型转换
1.多态中的自动类型提升
Dog d = new dog();
Animal a = new dog();
引用的类型是Animal的类型,而引用所指的类型Animal的子类类型。
    这时就发生了类型的自动提升。把Animal子类类型提升成了Animal类型。
这种类型的提升会导致无法使用子类特有的方法,如果想要使用子类的特有方法,必须将animal 类型再转成对应的子类型,才能去使用.
2.类型向下转型(强制类型转换)
Animal a =new dog();
Dog d = (dog)a;
animal 类型强转成子类型.
当我们把一个子类型强制转换成其他类型(这个类型不是子类的父类),会发生ClassCastException异常.
ClassCastException 叫作类型转换异常.
如何避免这个异常呢?
在进行向下转型时,应该先做类型判断,当符合强转要求时,我们才进行强转,否则就不进行转换.
健壮性判断用到if关健字,判断类型是否可转
  1.         public static void method(Animal a)
  2.         {
  3.                 a.eat();
  4.                 //a.lookHome();编译报错,原因是这里a是Animal类型,只能使用Animal中描述的功能,而无法使用子类特有的功能
  5.                 if( a instanceof Dog )
  6.                 {
  7.                         Dog d = (Dog)a;
  8.                         d.lookHome();
  9.                 }
  10.                 a.sleep();
  11.         }
复制代码








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