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

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错误
            
          }
}

怎么样才能拿到子类的参数?

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

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