加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用派生类型作为Java中的参数重载方法

发布时间:2020-12-15 08:42:15 所属栏目:Java 来源:网络整理
导读:假设我已经扩展了现有代码,但也避免尽可能地更改代码. 在这个代码的某处,有一个接收某种类型的方法. Engine.method(Base b) 现在,我想扩展此功能.所以我将Base扩展为一个名为Derived的类型,它包含了我需要的更多数据,并且我还实现了另一个接收Derived类型并
假设我已经扩展了现有代码,但也避免尽可能地更改代码.

在这个代码的某处,有一个接收某种类型的方法.

Engine.method(Base b)

现在,我想扩展此功能.所以我将Base扩展为一个名为Derived的类型,它包含了我需要的更多数据,并且我还实现了另一个接收Derived类型并使用它做一些不同的方法.

Engine.method(Derived d)

但我不想将原来的呼叫改为“方法”.我以某种方式设法通过使用标志来实现正确的类型(Base或Derived),但由于原始调用采用Base,因此我的新方法将不会被调用.

Base b = null;
if(flag) {
   b = new Derived()
} else{
   b = new Base()
} 
Engine.method(b)

问题是现在我的Engine.method(Derived d)不会被调用.我通过使用铸造来解决它

if(flag)
Engine.method((Derived)b)

但这是错误和愚蠢的.有什么建议?

我总是这样做:

if(flag) {
   Engine.methodForBase(new Base())
} else{
   Engine.methodForDerived(new Derived())
}

但你能想到更好的东西吗?

谢谢

解决方法

这是因为Java使用单一调度.这结束意味着在您的情况下,调用的方法取决于引用的类型“b”,它是Base,而不是“b”所包含的实例的类型.因此,将始终调用方法xpto.(Base b).

你真的必须使用你编写的最后一种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读