我有一个父类Request类和一个扩展Request的AddressRequest类。
public AddressRequest extends Request
{
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
我将输入数据放在请求对象中。如何通过调用子类中的userId方法将setter设置为同一对象。
我将Request对象向下强制转换为AddressRequest对象,并尝试调用抛出CTE的setter方法。
Request request= new AddressRequest ();
request=(AddressRequest )inputRequest;
request.setUserId("11");
向下转换object后如何调用子方法?
发布于 2016-06-21 20:58:50
因此,您在这里所做的本质上是动态调度。通过指定
Request request= new AddressRequest ();
您所做的是说这个请求是一个AddressRequest,但是通过将它称为一个请求,您就无法访问AddressRequest的方法。
一种快速的解决方案是,如果您确定要处理的是and和AddressRequest,则将->转换为
(AddressRequest) request.setUserId("11");
发布于 2016-06-22 01:51:40
您不能向下转换超类引用类型,它是超类的实例。
您可以向下转换超类引用类型,它是子类的实例。
在第一种情况下,inputRequest
的类型是Request
,而Request
是一个实例,即
Request inputRequest = new Request();
你不能将它强制转换为AddressRequest
,如果你尝试这样做,你会得到ClassCastException
,因为Request
的对象既不是AddressRequest
的子类,也不与它兼容。
但是如果您的inputRequest
是Request
类型并且是AddressRequest
的一个实例,那么您就可以成功了。i.e
Request inputRequest = new AddressRequest();
您可以公平地将其强制转换为您的子类(AddressRequest
)并应用其方法。
摘要:
Request req1 = new Request();
Request req2 = new AddressRequest();
Request req3 = new SubClassOfAddressRequest();
不能将req1
转换为AddressRequest
:req1是请求的对象,它与AddressRequest不兼容。
您可以将req2
转换为AddressRequest
:req2是AddressRequest的对象,并且与AddressRequest兼容。
您仍然可以将req3
转换为AddressRequest
:req3是AddressRequest的SubClass的对象(这是一种向上转换)。
希望这能有所帮助!
https://stackoverflow.com/questions/37945009
复制相似问题