我正在尝试为一个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) 是的。
2条答案
按热度按时间omvjsjqw1#
可能是这样的:
guykilcj2#
非常简单,声明父级为
abstract
并宣布execute()
作为abstract
在那个班也一样。然后宣布doSomething
但不要抽象。那就打电话execute()
从doSomething()
```abstract class Parent {
abstract void execute();
void doSomething() {
execute();
}
}
class B extends Parent {
void execute() {
//do some specific things for B
}
}