黑马程序员技术交流社区
标题:
向上转型和向下转型
[打印本页]
作者:
李前进
时间:
2014-3-29 20:00
标题:
向上转型和向下转型
什么是向上转型和向下转型?
猫 x = new 猫();
动物 x = new 猫();
这样属于向上转型还是向下转型啊?
作者:
optimisticpig
时间:
2014-3-29 20:12
这是父类引用指向子类对象,多态的表现
作者:
majunm
时间:
2014-3-29 20:13
向上转型: Person p = new Man() ; //向上转型需要强制类型转化
向下转型: Man man = (Man)new Person() ; //必须强制类型转化
Cat cat =(Cat)new Anima(); //向下转型 动物自降身价 变猫
Anima anima = new Cat();//向上转型 猫升级为动物
作者:
majunm
时间:
2014-3-29 20:25
Anima anima = new Cat();
Cat cat2 = (Cat) anima; //两句都写上 向下转型 才是正确的
作者:
Amorvos
时间:
2014-3-29 21:01
所谓向上转型就是将子类变量升级成父类变量,向上转型是安全的。
向下转型是将父类强制转换成子类,这一般是不安全的,存在精度损失之类的变量损失问题
作者:
syusikoku
时间:
2014-3-29 21:43
我给你举个例子。动物-->>狗/猫,这样是向下转换.狗/猫--->>动物,这个是向上转型
作者:
liushui12344
时间:
2014-3-29 22:04
Animal a = new Cat()//此时是将猫转化为动物,是向上转型,
Cat cat = (Cat)a;//此时是把父类的引用a转化为猫类型,此处应注意的是强转的是父类的引用!不是父类.
从头到尾都是转的子类对象.
作者:
╰青青子佩ˊゝ
时间:
2014-3-29 22:24
这个不是转型啦,给你举个例子吧
abstract class Animal{
public abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("eat fish");
}
public void catchMouse(){
System.out.println("catch mouse");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("eat bone");
}
public void guard(){
System.out.println("guard dog");
}
}
//多态转型,当要调用猫的特有方法时
class PolymorphicDemo{
public static void main(String[] args) {
Animal a = new Cat();
// a.catchMouse();//错误写法
Cat c = (Cat)a;
c.catchMouse();
}
}
复制代码
作者:
小武8686886
时间:
2014-3-29 22:55
面向对象中的转型只会发生在有继承关系的子类和父类中(接口的实现也包括在这里)。
假如有父类:人,子类:男人和女人。
向上转型: Person p = new Man() ; //向上转型不需要强制类型转化
向下转型: Man man = (Man)new Person() ; //必须强制类型转化
作者:
小班。
时间:
2014-3-30 12:15
这个需要分清父类和子类。应用在类的引用变量引用对象的问题上。
向上转型:父类的引用指向了一个子类的对象。这时子类对象在使用时可以当做就是一个父类在使用。
向下转型:子类的引用变量指向了一个父类的对象,在这时需要强制的类型转换。
猫 x = new 猫();//这个没有转换,就是一个猫类的引用变量指向了一个猫类的对象
动物 x = new 猫();//很明显,动物是猫的父类,即父类的动物引用变量指向了子类的猫对象。这属于向上转型。
猫 X = (猫)new 动物();这时向下转型,需要强制转换。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2