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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clp 中级黑马   /  2013-5-24 20:46  /  1439 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 clp 于 2013-5-25 06:35 编辑

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

3 个回复

倒序浏览
  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.                                 }
复制代码
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油

清楚明了,谢谢:handshake
回复 使用道具 举报
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油

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