java—关于具有同名方法的不相关类的多态性的问题?

643ylb08  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(248)

不相关类中的方法是否可能存在,同时具有相同的名称/签名而没有从另一个类或接口继承?
这些也可以被描述为“多态”调用吗?
在不从父类继承的情况下尝试多态地使用它们有什么缺点?

flvlnr44

flvlnr441#

你在描述一种叫做duck类型的情况——这个比喻是“如果它像鸭子一样走路,它像鸭子一样呱呱叫,那么它一定是鸭子”,或者用面向对象的术语来说——如果它有正确的方法,我们可以称之为duck。
然而,java并不是这样工作的。
至少不是很明显。
一个是围绕着这是与反思。假设你有两个班, 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为您提供的所有好处和保护。
除非你有很好的理由这么做,否则我不会走那条路。

相关问题