美文网首页
【面向对象】基类和派生类运用

【面向对象】基类和派生类运用

作者: 嘻洋洋 | 来源:发表于2019-05-14 15:16 被阅读0次

    1. 基本原则

    (1)派生类对象可以向基类对象赋值。
    所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题。赋值后基类对象不能访问派生类对象的属性和方法(基类中没有)。派生类的属性其实转换到基类,只是不能访问

    //GoodsInfoDto对象转换成基类对象jbBaseDto ,属性转换到基类对象
    JbBaseDto jbBaseDto = JbCommonService.postForObject(goodsReq,"url",GoodsInfoDto.class);
    
    image.png

    (2)基类的对象不能给派生类的对象赋值
    因为基类对象不包含派生类的成员,无法对派生类的成员赋值。同理,同一基类的不同派生类对象之间也不能赋值。
    根据不能赋值的理由推理:把派生类对象赋值给基类对象,再把基类对象赋值给另外一个派生类对象,这是可以的。经过第一次赋值后,基类对象已经有类派生类对象所有属性,再把基类对象赋值给另外一个派生类对象就没问题。

    2. 基类经常用于封装

    经常我们需要对公共业务进行封装,基类作为参数,或者作为返回值进行方法封装,特别是在接口开发中最常用,例如:

       //对请求接口进行封装,基类JbBaseReq参数(调用时是派生类) ,基类JbBaseDto 返回值(实际上派生类赋值过)
        public static JbBaseDto postForObject(JbBaseReq jbBaseReq, String url, Class<?> clazz) {
            MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();
            String xmlRequest = XmlUtil.beanToXml(jbBaseReq);
            requestEntity.add("Message", xmlRequest);
            String responseContent ="";
            RestTemplate restTemplate = new RestTemplate();
            try
            {
                responseContent = restTemplate.postForObject(url, requestEntity, String.class);
            }
            catch (Exception e)
            {
                String errMsg = StringEscapeUtils.escapeJava(e.getMessage());
                responseContent = "{\"rtnCode\":\"-1\",\"rtnMsg\":\"" + errMsg + "\"}";
            }
            Gson gson = new Gson();
            return (JbBaseDto) gson.fromJson(responseContent, clazz);
        }
    

    调用方法:基类转换成派生类

     GoodsReq goodsReq = new GoodsReq();
     goodsReq.setHgGoodsNo("310520156160600318");
     GoodsInfoDto goodsInfoDto = (GoodsInfoDto)JbCommonService.postForObject(goodsReq,"url",GoodsInfoDto.class);
    

    相关文章

      网友评论

          本文标题:【面向对象】基类和派生类运用

          本文链接:https://www.haomeiwen.com/subject/zcamgqtx.html