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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程玉习 中级黑马   /  2014-1-2 22:14  /  1019 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面向对象的多态有几种类型啊。。。晕了,求大婶解答,越详细好!

6 个回复

倒序浏览
多态就是继承方面的理解,就是父类动态指向子类的相同方法,即子类覆盖父类的方法,这就是多态,父类的方法被覆盖了就会执行子类的方法,
回复 使用道具 举报
有两种,向上类型转换(子类转父类)和向下类型转换(父类转子类)
回复 使用道具 举报
1、 抽象类的语法:                           访问修饰符 abstrac class 类名         2、 父类中的方法:                           访问修饰符 abstrac 返回类型 方法();  注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。           抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。           抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。      3、重写抽象方法:                            访问修饰符 override 返回类型 方法()       4、使用场合:                         A 父类提供了一个功能或者规定,约束子类的行为

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
父类或者接口的引用指向子类或者所实现对象
回复 使用道具 举报
多态,动物 》》肉食动物》》老虎。可以理解为继承关系,这时老虎既可以用:肉食动物:来称呼他
也可以用:动物:来称呼他,即所谓的向上转型

一个对象,可以由多种  父类变量引用也是多态的一种表现
回复 使用道具 举报
这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.

面向对象的多态
多太就是事物(对象)的多种表现形态
父类指向子对象
多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象
多态的弊端:只能访问父类的功能,无法使用子类特有的功能.
:
  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.         }
复制代码



评分

参与人数 1技术分 +2 收起 理由
田磊阳 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马