是否可以从另一个插件调用重写方法? [适用于Minecraft插件]

时间:2017-06-06 13:09:50

标签: java sockets plugins minecraft

我为一个程序编写了两个插件,其中一个插件是一个"库插件"并包含其他插件使用的很多类,另一个是基于此库的插件之一。一切都很好,除了一件事。在我的库插件中,我写了一个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);
    }
}

当我向套接字发送套接字消息时,它会像库执行方法中那样打印到控制台。

所以我在这里,有人可以给我一个答案,可能还有解决方案吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您发布的代码中存在错误:

  MServerSocket.send(clientOutput, input);

这是不正确的,因为send不是static方法。它应该写成:

 this.send(clientOutput, input);

 super.send(clientOutput, input);

或只是

 send(clientOutput, input);

但是要回答你的问题,你看到“打印”的原因是你在一个MServerSocket实例而不是MyServerSocket实例的实例上调用initServer方法。由于它是MServerSocket实例,它没有覆盖方法