不想战斗 2022-03-09 12:03 采纳率: 33.3%
浏览 224
已结题

父类作为形参,子类作为实参传递只能拿到父类参数

talk is cheap show me the code
// 父类
class QueryParam {
    private String A;
    private String B;
}

// 子类
class SonQueryParam extends QueryParam {
    private String C;
    private String D;
}

// 接口
public interface IAuditService{
             List<A> getRecordList(QueryParam queryParam);
}

// controller
public A list(SonQueryParam queryParam) {
       // 调用接口方法,传子类作为实参
       auditService.getRecordList(queryParam));
}

// service 实现上面接口
public class service implements IAuditService {
          @Override
          public A list(QueryParam queryParam) {
           // 调用接口方法,传子类作为实参
           queryParam.getC() // 此处保错
           // 如果使用
           // SonQueryParam param = (SonQueryParam) queryParam;
           // 报QureyParam cannot be cast to SonQueryParam错误
            
          }
}

怎么样才能拿到子类的参数?
  • 写回答

2条回答 默认 最新

  • 测试,创始人 2022-03-09 13:17
    关注

    你这是拿到不了子类的形参的,因为对象的引用是父类,只能拿到父类中的参数,无法使用多态。只有子类继承了父类并且重写了父类的方法后,才能通过父类的引用使用子类中的方法,这是多态。你可以搜一搜JAVA中多态的使用,看看就明白了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分