使用派生类型作为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).
你真的必须使用你编写的最后一种方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |