java 子类转换,java – 使用另一个子类的子类方法,横向转换?

Java中,我获得了一项任务.我可以用它来描述我的问题,如下所示:

创建三个类A B和C.

A类具有实例变量j,k,l,setter和getter方法,以及基于它们进行计算的方法x.

B类是A的子类,并使用j,k,l覆盖具有相同空签名的方法x.

C类也是A的子类,并且有一个额外的类y,它可以处理其他垃圾.

现在,实例化一个C类对象,设置其变量,执行方法x,然后使用来自B类的方法x的覆盖版本.

我的问题是,我最后一部分怎么做?我认为这个问题不正确,或者我解释错了.我可以将类C对象转换为类B对象,然后使用类B的x()版本吗?我对铸造物体知之甚少,以及是什么决定了是否可以从一件物品投射到另一件物品.上升可能与“水平/横向”铸造一样有损,但我从未听说过后者.是否不可能在C类中使用B类中的方法而不使C类内部实例化并从其自己的变量重建B类对象?我有道理吗?

附录:

好的.所以兄弟姐妹不能彼此演员?因为C和B都是“我的对象层次结构”的一部分.我可以抛弃然后回到另一个子类吗?就像把猫送到动物类,然后把动物送到狗身上一样?因为方法x依赖于类A和类B中的实例变量,所以在C中创建B的新实例将创建一个具有未设置相同的字段/变量的对象,它们将全部为零或类似.因此,我必须将j,k和l的每个值复制到C类对象中的新B类型对象中.这似乎浪费时间和内存,将对象变量复制到另一个非常相似的对象中.但没有其他办法吗?

第二个附录:

虽然我已经选择了一个答案,但我仍然对一般的投射以及我称之为横向投射感到好奇.如果B和C都是A的子类,你可以允许从B转换为C吗?另外,一般来说如何允许施放?

第三:

所以在这一点上,几年后我明白这在Java中是不可能实现的.但是,有趣的是,在JavaScript和PHP中,您可以使用函数的“bind”方法来更改它的上下文,以便它基本上认为它是另一个对象.所以在这种情况下,我可以创建一个B:x()的副本绑定到包含我已设置的属性的C实例,然后x的绑定实例将使用C实例的所有内部变量.这真的很奇怪但有时真的很方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值