我有很多类基本上是等价的,即在所有方面都具有几乎相同的功能。我们称它们为 A 和 B。有数百种方法正在使用 A,现在由于代码更改,我必须将它们更改为 B。
有没有一种方法可以对 A 和 B 之间的映射进行编程,从而使代码更改最少?
最佳答案
如果A
不是 final
,你可以制作B extends A
, 并有 B
的方法 @Override
A
的。然后,无论您之前在 instanceof A
上调用什么方法,您现在提供一个 instanceof B
,并让动态调度处理其余部分。
这称为多态性。它仅适用于非 static
具有完全相同签名的方法。你不能@Override
static
方法。
另见
- Java Tutorials/Object-Oriented Programming Concepts
- http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
相关问题
在界面上
根据您这样做的原因,您应该了解接口(interface)的概念以及如何在面向对象的编程中使用它们以实现这种灵 active 和便利性。
考虑 interface List<E>
,例如,和一个实现 ArrayList<E>
.如果你编写了一个与 ArrayList<E>
一起工作的整个库,做所有平常的事情add/addAll/remove
等等,现在你必须使用 LinkedList<E>
相反,您别无选择,只能转到源代码并更改所有 ArrayList<E>
至 LinkedList<E>
,并希望更改不会破坏另一个仍然假定 ArrayList<E>
的代码被使用了。
如果您的图书馆使用 List<E>
, 然后切换到 LinkedList<E>
只需要在创建对象的地方完成。所有其他执行 add/addAll/remove
的代码仍然可以正常工作,因为那些是在 interface List<E>
中定义的方法所有实现者都将拥有。
从目前的上下文来看还不清楚,但如果A
和 B
如此相似,那么也许它们属于某种类型 X
.如果是这样,您应该考虑定义 interface X
, 并有 A implements X
, 和 B implements X
.
另见
- Java Tutorials/Object-Oriented Programming Concepts/Interfaces
- Effective Java 2nd Edition,第 52 条:通过接口(interface)引用对象
相关问题
关于java - 用户定义类的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549902/