zoukankan      html  css  js  c++  java
  • JAVA对象 向上转型upcasting,向下转型downcasting

    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 anaimal = new Dog();
            //只能访问父类的getHeight方法 不能访问子类的getDogHeight  因为Dog是当做anaimal用的 
            anaimal.getHeight();
        }  
    }

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

    2.向下转型

    向下转型就是平时代码中的强转

        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

  • 相关阅读:
    【BZOJ4517】排列计数(排列组合)
    【BZOJ2733】永无乡(线段树,启发式合并)
    【BZOJ1237】配对(贪心,DP)
    【BZOJ1492】货币兑换Cash(CDQ分治)
    CDQ分治模板
    【BZOJ3932】任务查询系统(主席树)
    【BZOJ3295】动态逆序对(BIT套动态加点线段树)
    【BZOJ3626】LCA(树上差分,树链剖分)
    图书管理系统
    树集合,树映射
  • 原文地址:https://www.cnblogs.com/ssskkk/p/9098027.html
Copyright © 2011-2022 走看看