不相关类中的方法是否可能存在,同时具有相同的名称/签名而没有从另一个类或接口继承?这些也可以被描述为“多态”调用吗?在不从父类继承的情况下尝试多态地使用它们有什么缺点?
flvlnr441#
你在描述一种叫做duck类型的情况——这个比喻是“如果它像鸭子一样走路,它像鸭子一样呱呱叫,那么它一定是鸭子”,或者用面向对象的术语来说——如果它有正确的方法,我们可以称之为duck。然而,java并不是这样工作的。至少不是很明显。一个是围绕着这是与反思。假设你有两个班, A 以及 B ,它们都有一个 doSomething() 方法。你可以得到他们的 Class 在运行时,使用它们获取相关的 method 对象,然后调用它:
A
B
doSomething()
Class
method
public static void callSomething(Object o) throws Exception { Class<?> clazz = o.getClass(); Method method = clazz.getMethod("doSomething"); method.invoke(o); }
这是可行的,但实际上您已经放弃了java为您提供的所有好处和保护。除非你有很好的理由这么做,否则我不会走那条路。
1条答案
按热度按时间flvlnr441#
你在描述一种叫做duck类型的情况——这个比喻是“如果它像鸭子一样走路,它像鸭子一样呱呱叫,那么它一定是鸭子”,或者用面向对象的术语来说——如果它有正确的方法,我们可以称之为duck。
然而,java并不是这样工作的。
至少不是很明显。
一个是围绕着这是与反思。假设你有两个班,
A
以及B
,它们都有一个doSomething()
方法。你可以得到他们的Class
在运行时,使用它们获取相关的method
对象,然后调用它:这是可行的,但实际上您已经放弃了java为您提供的所有好处和保护。
除非你有很好的理由这么做,否则我不会走那条路。