Java中的向上转型和向下转型

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

一.向上转型

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

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

//定义一个抽象的动物父类

public abstract class Animal

{

    public abstract void Play();//此处需注意抽象方法没有方法体

}

//定义一个狗狗类,继承自Animal

public 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();//此处需注意抽象方法没有方法体

}

//定义一个狗狗类,继承自Animal

public class Dog extends Animal

{
}

//定义猫类,继承自Animal

public 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的抽象面向对象编程。

猜你喜欢

转载自www.linuxidc.com/Linux/2016-04/130470.htm