向上转型:父类引用指向子类对象;
向下转型:父类引用指向子类的对象再转回为子类对象;
如果有 Cat 类 集成 Animal类,
向上转型:猫 继承了动物,所以猫可以转为动物 ,即 Animal a= new Cat();
向下转型:如果 a 想变成Cat,既要向下转型 Cat c=(Cat) a;
那么看下这个例子:
有一个类,Animal类:
package test;
public class Animal {
public void say() {}
}
此时,有另一个类继承了Animal
package test;
public class Human extends Animal{
@Override
public void say() {
System.out.println("我是人类");
}
}
然后 Man继承Human
package test;
public class Man extends Human{
@Override
public void say() {
System.out.println("我是男人");
}
public void ags() {
System.out.println("今年25");
}
}
如果有
Animal a=new Man();
a.say();
Man m=(Man)a;
m.say();
m.ags();
相信大家都知道结果,那么如果
Human h=(Human)a;
h.say();
结果会是什么了?通过打印发现,结果如下
这种可能有同学会说这不是向下转型吗,不,这也是向上转型,只不过先向下转,在向上转,即
Man m=(Man) a;
然后再:
Human h=Man m;
可以这样立即,一个男人是动物类,即Animal a=new Man();
那么他也可以是人类,即 Human h= a,但是中间发生了向下转型,所以是Human h=(Man) a;