码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA对象 向上转型upcasting,向下转型downcasting

时间:2018-05-28 00:54:10      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:stat   多态   bsp   子类   []   ext   end   main   height   

1:向上转型

  向上转型,就是java多态中的父类引用指向子类对象。但要注意的是 父类引用不可以访问子类新增加的成员(熟悉和方法)

  代码举例:

/**
 * 定义一个父类
 */
public class Anaimal{

    private Long height;

    public Long getHeight() {
        return height;
    }

    public void setHeight(Long height) {
        this.height = height;
    }
    
}
/**
 * 下面的main方法可测 父类的引用指向子类的对象 
 * 向上转型 也就是多态
 */
public class Dog  extends Anaimal{
    
    private Long dogHeight;

    public Long getDogHeight() {
        return dogHeight;
    }


    public void setDogHeight(Long dogHeight) {
        this.dogHeight = dogHeight;
    }

    public static void main(String[] args) {
        //父类引用指向子类对象
        Anaimal an = new Dog();
        //只能访问父类的getHeight方法 不能访问子类的getDogHeight  因为Dog是当做anaimal用的 
        an.getHeight();
    }
    
}

以上 main()方法中 虽然an是指向Dog()的引用,但是an是当做Anaimal用的 所以看不到Dog独有的那部分

当然: 如果an想访问 Dog独有的对象,可以使用向下转型

 

    public static void main(String[] args) {
        //父类引用指向子类对象
        Anaimal an = new Dog();
        //只能访问父类的getHeight方法 不能访问子类的getDogHeight  因为Dog是当做anaimal用的 
        an.getHeight();
        //如果想访问Dog独有的方法,可以把 an向下转型成Dog
        //TODO 注意 如果是Anaimal an = new Anaimal(); an是转不成Dog的
        Dog an2 = (Dog)an;
        an2.getDogHeight();
    }

 

代码TODO 已经说明,使用向下转型的前提,是当前引用 指向的就是所需转型子类的对象。

否则会报错:java.lang.ClassCastException

 

JAVA对象 向上转型upcasting,向下转型downcasting

标签:stat   多态   bsp   子类   []   ext   end   main   height   

原文地址:https://www.cnblogs.com/ssskkk/p/9098027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!