首页 > 解决方案 > 关于具有相同名称的方法的多态无关类的问题?

问题描述

是否可能存在不相关类中的方法,巧合地具有相同的名称/签名而没有从另一个类或接口继承?

  1. 这些也可以被描述为“多态”调用吗?
  2. 尝试在不从父类继承的情况下多态地使用它们有什么缺点?

标签: javamethodspolymorphism

解决方案


您正在描述一种称为鸭子类型的情况- 类比是“如果它像鸭子一样走路并且它像鸭子一样嘎嘎叫,那么它一定是鸭子”,或者用 OO 术语来说 - 如果它有正确的方法,我们可以称之为。

然而,Java 不是这样工作的。

至少不是以任何明显的方式。

一个是围绕这个是反射。假设您有两个类AB,它们都有一个doSomething()方法。您可以Class在运行时获取它们的对象,使用它们来获取相关method对象,然后调用它:

public static void callSomething(Object o) throws Exception {
    Class<?> clazz = o.getClass();
    Method method = clazz.getMethod("doSomething");
    method.invoke(o);
}

这会起作用,但您实际上是在抛弃 Java 为您提供的所有好处和保护。

除非你有非常好的理由这样做,否则我不会走那条路。


推荐阅读