我正在编写一个程序的两个插件,其中一个插件是“库插件”,包含很多其他插件使用的类,另一个是基于此库的插件之一。一切都很好,除了一件事。 在我的库插件中,我写了一个sintetized的套接字类:
public class MServerSocket {
public void initServer(int port) {
//Code to receive message from client
execute(input, clientOutput);
}
public void execute(String input, DataOutputStream clientOutput) {
System.out.println(input);
send(clientOutput, input);
}
public void send(DataOutputStream clientOutput, String output) {
//Code to send message to client
}
}
在另一个插件中,我扩展了这个类并重写了execute方法来执行某些操作,如下所示:
public class MySocketServer extends MServerSocket {
@Override
public void execute(String input, DataOutputStream clientOutput) {
//Do something
MServerSocket.send(clientOutput, input)
}
}
现在我的第二个插件应该覆盖我的库插件类,但事实并非如此。 在第二个插件中,我在主体中称它为:
public class Main {
public void onEnable() { //method called to load plugin
private static MServerSocket socket = new MServerSocket();
socket.initServer(12980);
}
}
当我向套接字发送套接字消息时,它会像库执行方法中那样打印到控制台。
所以我在这里,有人可以给我一个答案,可能还有解决方案吗?提前致谢
答案 0 :(得分:0)
Your code currently constructs a MServerSocket
object but if you want the behaviour of your MySocketServer
to be executed, you need to construct one of those.
You should also change (at a minimum):
MServerSocket.send(clientOutput, input)
...to
super.send(clientOutput, input)
...as that's the proper way to delegate to a method from the parent class.