黑马程序员技术交流社区

标题: 多态 向上向下转型的使用 [打印本页]

作者: clp    时间: 2013-5-24 20:46
标题: 多态 向上向下转型的使用
本帖最后由 clp 于 2013-5-25 06:35 编辑

1,多态中,什么时候需要向上转型,向下转型,它们之间的区别在什么地方?学到这里,的时候有点模糊,能否给例子,详细介绍一下

作者: Super_Class    时间: 2013-5-24 22:01
  1. |——多态的转型:
  2.                                 向上转型:限定功能使用,提高扩展性
  3.                                 Animal a = new cat();//自动类型提升
  4.                                
  5.                                 abstract class Animal{
  6.                                         abstract void eat();
  7.                                 }
  8.                                
  9.                                 class Cat extends Animal{
  10.                                         public void eat(){
  11.                                                 System.out.println("猫吃鱼");
  12.                                         }
  13.                                         public void catchMouse(){
  14.                                                 System.out.println("猫抓老鼠");
  15.                                         }
  16.                                        
  17.                                 }
  18.                                 //一旦完成了这个自动转型,就不能访问特有的行为
  19.                                 //上边的 对象 a 就不能访问cat 类里边没有从Animal里边继承来的catchMouse方法
  20.                        
  21.                                 |--向下转型:这样是为了调用特有的方法。
  22.                                         Cat c = (Cat)a;
  23.           注-->注-->抽象类可以实例化
  24.                                
  25.                                 总的来说:
  26.                                         如果子类继承父类后,没有对方法进行覆盖,那么自动转型后是可以使用父类中的方法。
  27.                                         如果子类方法将父类方法覆盖了,那么调用的就是子类中地方法。
  28.                                         但是,如果父类本来就没有这个方法。转型后,硬要调用这个方法,编译失败。
  29.                        
  30.                                 abstract class Animal{
  31.                                         abstract void eat();
  32.                                        
  33.                                         void sleep(){
  34.                                                 System.out.println("Sleep");
  35.                                         }
  36.                                 }

  37.                                 class Cat extends Animal{
  38.                                         public void eat(){
  39.                                                 System.out.println("eat fish");
  40.                                         }
  41.                                        
  42.                                         public void catchMouse(){
  43.                                                 System.out.println("catchmouse");
  44.                                         }
  45.                                 }


  46.                                 public class Test{
  47.                                         public static void main(String []args){
  48.                                                 Animal a = new Cat();
  49.                                                 a.sleep();
  50.                                         //        a.catchMouse();直接编译失败
  51.                                         }
  52.                                 }
复制代码
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油
作者: clp    时间: 2013-5-24 23:02
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油

清楚明了,谢谢:handshake
作者: 神之梦    时间: 2013-5-25 01:27
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油

{:soso_e179:}




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