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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李前进 中级黑马   /  2014-3-29 20:00  /  1743 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是向上转型和向下转型?

猫  x = new 猫();
动物  x = new 猫();

这样属于向上转型还是向下转型啊?

9 个回复

倒序浏览
optimisticpig 来自手机 中级黑马 2014-3-29 20:12:31
沙发
这是父类引用指向子类对象,多态的表现
回复 使用道具 举报
向上转型: Person p = new Man() ; //向上转型需要强制类型转化
向下转型: Man man = (Man)new Person() ; //必须强制类型转化
Cat cat =(Cat)new Anima(); //向下转型   动物自降身价 变猫
Anima anima = new Cat();//向上转型    猫升级为动物

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
Anima anima = new Cat();
                Cat cat2 = (Cat) anima;  //两句都写上   向下转型 才是正确的
回复 使用道具 举报
所谓向上转型就是将子类变量升级成父类变量,向上转型是安全的。
向下转型是将父类强制转换成子类,这一般是不安全的,存在精度损失之类的变量损失问题
回复 使用道具 举报
我给你举个例子。动物-->>狗/猫,这样是向下转换.狗/猫--->>动物,这个是向上转型
回复 使用道具 举报
Animal a = new Cat()//此时是将猫转化为动物,是向上转型,
Cat cat = (Cat)a;//此时是把父类的引用a转化为猫类型,此处应注意的是强转的是父类的引用!不是父类.

从头到尾都是转的子类对象.
回复 使用道具 举报
这个不是转型啦,给你举个例子吧
  1. abstract class Animal{
  2.         public abstract void eat();
  3. }
  4. class Cat extends Animal{
  5.         public void eat(){
  6.                 System.out.println("eat fish");
  7.         }
  8.         public void catchMouse(){
  9.                 System.out.println("catch mouse");
  10.         }
  11. }
  12. class Dog extends Animal{
  13.         public void eat(){
  14.                 System.out.println("eat bone");
  15.         }
  16.         public void guard(){
  17.                 System.out.println("guard dog");
  18.         }
  19. }
  20. //多态转型,当要调用猫的特有方法时
  21. class  PolymorphicDemo{
  22.         public static void main(String[] args) {
  23.                 Animal a = new Cat();
  24.         //        a.catchMouse();//错误写法
  25.                 Cat c = (Cat)a;
  26.                 c.catchMouse();
  27.         }
  28. }
复制代码
回复 使用道具 举报
面向对象中的转型只会发生在有继承关系的子类和父类中(接口的实现也包括在这里)。
假如有父类:人,子类:男人和女人。
向上转型: Person p = new Man() ; //向上转型不需要强制类型转化
向下转型: Man man = (Man)new Person() ; //必须强制类型转化
回复 使用道具 举报
这个需要分清父类和子类。应用在类的引用变量引用对象的问题上。
向上转型:父类的引用指向了一个子类的对象。这时子类对象在使用时可以当做就是一个父类在使用。
向下转型:子类的引用变量指向了一个父类的对象,在这时需要强制的类型转换。

猫  x = new 猫();//这个没有转换,就是一个猫类的引用变量指向了一个猫类的对象
动物  x = new 猫();//很明显,动物是猫的父类,即父类的动物引用变量指向了子类的猫对象。这属于向上转型。

猫 X = (猫)new 动物();这时向下转型,需要强制转换。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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