Java 我可以将子类实例传递给接受超类实例的方法吗

Java 我可以将子类实例传递给接受超类实例的方法吗,java,reflection,polymorphism,downcast,upcasting,Java,Reflection,Polymorphism,Downcast,Upcasting,我有一个类似的设置。当我尝试使用java反射调用execRequest方法,并在parameterArray中传递子类实例DelRequest时,我得到一个NoSuchMethodFound异常 DelRequest delReq=new DelRequest(); delReq.setMsg("something"); Request req=(Request) delReq; 我只有很少的服务方法,然后最终调用以下代码行。注意,这次我传递的是超类实例,它的定义是方法签名公共字符串execR

我有一个类似的设置。当我尝试使用java反射调用execRequest方法,并在parameterArray中传递子类实例DelRequest时,我得到一个NoSuchMethodFound异常

DelRequest delReq=new DelRequest();
delReq.setMsg("something");
Request req=(Request) delReq;
我只有很少的服务方法,然后最终调用以下代码行。注意,这次我传递的是超类实例,它的定义是方法签名公共字符串execRequest(请求请求)

这是我的基本设置,请指出我错在哪里,可以这样做吗

class DelRequest extends Request {
private String msg;


 /* getters and setters */
}

class Request {
}



class ExecuteRequest{
public String execRequest(Request request){
/* request do something*/
}

}

反射API要求使用声明的参数类型。因此,即使可以使用
DelRequest
调用
execRequest
,也需要使用
Request.class
作为参数

参数类型
parameterTypes
参数是一个
Class
对象数组,它 按照声明的顺序标识方法的形式参数类型
。如果
parameterTypes
为空,将其视为空数组


是的,你可以。但我想这不是你的问题所在。
execRequest
是否需要是静态的?静态函数和继承不是很好的组合!对不起,这不是静态的,我会编辑的,我也在尝试同样的事情,可能是我做错了什么。我尝试将DelRequest****类型转换为***请求并传递请求实例,但这似乎不起作用。有什么帮助吗???@Shahbaz我不明白。请用尝试的代码编辑你的问题。我已经编辑了这是虚拟代码,不是实际代码,但这是我正在做的actually@Shahbaz在您的示例中,
parameterary
是什么?它应该只是一个
新类[]{Request.Class}
。我现在遇到了一个问题,实际上lClass.getMethod(“execRequest”,parameterArray)是在我们的框架中发生的,parameterArray数组由DelRequest.Class组成。我添加了一个条件检查,并使它成为Request.class,它正在工作
class DelRequest extends Request {
private String msg;


 /* getters and setters */
}

class Request {
}



class ExecuteRequest{
public String execRequest(Request request){
/* request do something*/
}

}