首页 > 解决方案 > 使用仅在子类中定义的方法 - JAVA

问题描述

我正在尝试为我只能访问接口的 java 项目实现一个插件。
该项目具有以下结构:

超类:A
子类:B、C、E 和 F

所有的子类 B、C、D、E 和 F 都扩展了类 A,并有一个名为“execute()”的方法。此方法未在超类 (A) 中定义。

现在我想在我的插件中实现一个名为“doSomething()”的方法,它使用子类 B、C、D、E 和 F 的“execute()”方法。
我不想重复相同的方法 4次(对于每个子类)。

当我将超类(A)作为参数时,我无法访问子类中定义的方法:

public void doSomething(A a) {
   a.execute()
}

我还尝试生成 doSomething() 方法并定义多个上限,如下所示:

public <T extends B, C, D, E, F> void doSomething(T t) {
   t.execute();
}

但是不可能在上限中定义一个以上的类,因为不可能有继承自多个超类的类型。

有没有办法实现 doSomething() 方法而不复制它或更改子类的源代码?
请注意,我不能更改任何给定的类(A,... F)。

标签: javagenericsinheritancesubclasssuperclass

解决方案


非常简单,在该类中声明父级abstract并声明execute()abstract好。然后也声明doSomethingin 父级,但使其不是抽象的。然后execute()doSomething()

abstract class Parent {
 abstract void execute();
void doSomething() {
 execute();
}
}

class B extends Parent {
 void execute() {
  //do some specific things for B
 }
}

推荐阅读