java中向上转型和向下转型浅析
基础概念
向上转型就是子类对象被父类引用,例如动物和小鸟的关系,小鸟属于动物,动物不仅仅只包含小鸟,还包含猫和狗等,例如:
Animal birdAnimal = new Bird();这种方式就是向上转型,代码如下:
class Animal
{
public void run()
{
System.out.println("父类的animal running...");
}
}
class Bird extends Animal
{
@Override
public void run()
{
System.out.println("子类小鸟在 running...");
}
public void fly()
{
System.out.println("子类小鸟在 flying...");
}
}
public class Test
{
public static void main(String[] args)
{
Animal b=new Bird(); //向上转型
b.run();
// b.fly(); b虽指向子类对象,但因为向上转型而失去了fly()方法
}
}
上面代码是向上转型的例子,输出结果是run方法的:子类小鸟在 running… ,对于子类b的fly()方法会因为向上转型而丢失。
向下转型:向下转型是子类对象被父类引用之后,再把父类引用强转成子类,强转时叫做向下转型。
例子:
public class Test {
public static void main(String[] args) {
Animal b = new Bird();
b.run();
// b.fly();//向上
Bird bird = (Bird)b;//向下转型
bird.run();
bird.fly();
}
}
输出结果:
子类小鸟在 running...
子类小鸟在 running...
子类小鸟在 flying...
向下转型意义:当多个子类继承同一个父类或接口时,可以写一个公用的方法,方法传入的形参为父类或接口,这样每个子类实参就可以传入这个父类形参中,进而实现公用性。例如:
public class Test {
public static void main(String[] args) {
Bird b1 = new Bird();
Tom tom = new Tom();
sleep(b1);//传入的是子类实参引用
sleep(tom);//传入的是子类实参引用
}
public static void sleep(Animal A) //方法的参数是父类!!
{
A.run();
}
}
输出结果:
子类小鸟在 running...
子类tom猫在 running...
还没有评论,来说两句吧...