首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将父对象降级为子对象后,如何调用子方法?

将父对象降级为子对象后,如何调用子方法?
EN

Stack Overflow用户
提问于 2016-06-21 20:52:52
回答 2查看 1.4K关注 0票数 1

我有一个父类Request类和一个扩展Request的AddressRequest类。

代码语言:javascript
运行
复制
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方法。

代码语言:javascript
运行
复制
Request request= new AddressRequest ();
request=(AddressRequest )inputRequest;
request.setUserId("11");

向下转换object后如何调用子方法?

EN

回答 2

Stack Overflow用户

发布于 2016-06-21 20:58:50

因此,您在这里所做的本质上是动态调度。通过指定

代码语言:javascript
运行
复制
Request request= new AddressRequest ();

您所做的是说这个请求是一个AddressRequest,但是通过将它称为一个请求,您就无法访问AddressRequest的方法。

一种快速的解决方案是,如果您确定要处理的是and和AddressRequest,则将->转换为

代码语言:javascript
运行
复制
(AddressRequest) request.setUserId("11");
票数 1
EN

Stack Overflow用户

发布于 2016-06-22 01:51:40

您不能向下转换超类引用类型,它是超类的实例。

您可以向下转换超类引用类型,它是子类实例。

在第一种情况下,inputRequest的类型是Request,而Request是一个实例,即

代码语言:javascript
运行
复制
Request inputRequest = new Request();

你不能将它强制转换为AddressRequest,如果你尝试这样做,你会得到ClassCastException,因为Request的对象既不是AddressRequest的子类,也不与它兼容。

但是如果您的inputRequestRequest类型并且是AddressRequest的一个实例,那么您就可以成功了。i.e

代码语言:javascript
运行
复制
Request inputRequest = new AddressRequest();

您可以公平地将其强制转换为您的子类(AddressRequest)并应用其方法。

摘要:

代码语言:javascript
运行
复制
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的对象(这是一种向上转换)。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37945009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档