你的位置:首页 > Java教程

[Java教程]Java中的向上转型和向下转型


       首先要明白一点向上转型和向下转型他们都是建立在继承的基础上。

一.向上转型

    子类到父类的转换通常称作向上转型,通俗的说就是定义父类对象指向子类对象。

下面通过一个例子来深入理解向上转型.

//定义一个抽象的动物父类public abstract class Animal{  public abstract void Play();//此处需注意抽象方法没有方法体 }

 

//定义一个狗狗类,继承自Animalpublic class Dog extends Animal{   //重写父类的Play方法  public void Play()  {  System.out.println("狗狗正在欢快的玩耍。。。。。");  }  //子类还有自己特有的eat方法  public void eat() {  System.out.println("狗狗正在欢快的吃着。。。。。");  }}

//测试类public void Test{public static void main(String[] args) {   Animal animal=new Dog();//向上转型,父类对象指向子类对象  animal.Play();//能正常编译  animal.eat();//编译不通过,父类的引用无法调用子类特有的方法}}

从上面这个例子可以总结出自乐装换成父类时的规则:

01.将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。

02.通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法。

03.通过父类引用变量无法调用子类特有的方法。

    二.向下转型

  上面已经说到,当向上转型发生后,将无法调用子类特有的方法。但是当需要调用子类特有的方法时,可以通过将父类在转换为子类来实现。

向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型。注意:必须进行强制类型转换。

   

//定义一个抽象的动物父类public abstract class Animal{  public abstract void Play();//此处需注意抽象方法没有方法体 }

 

 

//定义一个狗狗类,继承自Animalpublic class Dog extends Animal{}

 

//定义猫类,继承自Animalpublic class Cat extends Animal{}

 

public class Test{   Animal animal=new Dog();   Dog dog=(Dog)animal;//向下转型,强制转换为狗狗对象   Cat cat=(Cat)animal;//运行出错}

 

向下转型:转型时转的类型必须是父类对象所指的真实子类对象,不是任意的轻质转换。

最后总结一下吧!

1、父类引用可以指向子类对象,子类引用不能指向父类对象。

2、把子类对象直接赋给父类引用叫向上转型,向上转型不用强制转型。

3、把指向子类对象的父类引用赋给子类引用叫向下转型,要强制转型。

4、向上转型会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效

5、向上转型的作用,减少重复代码,父类做为参数,调用时子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象面向对象编程。