Java 重写接口?

Java 重写接口?,java,interface,minecraft,overriding,minecraft-forge,Java,Interface,Minecraft,Overriding,Minecraft Forge,我正在为游戏Minecraft创建一个mod,它有一个接口来实现游戏中的命令。我需要mod来实现这个接口,但是用一个不兼容的方法(不同的返回类型)重写它的一个方法。但是我需要防止其他实现该接口的类无法工作或无法被游戏识别的情况 我认为这需要使用与原始接口相同的新接口覆盖该接口,但是使用该方法的重载版本来支持mod的需要。这是可能的(或者有其他方法可以实现吗?您可以实现mod类。然后重写该方法。还要编写另一个方法,该方法将在实现的类中重载该方法。这样,您就不必更改接口。考虑接口的一种方法是将其视为

我正在为游戏Minecraft创建一个mod,它有一个接口来实现游戏中的命令。我需要mod来实现这个接口,但是用一个不兼容的方法(不同的返回类型)重写它的一个方法。但是我需要防止其他实现该接口的类无法工作或无法被游戏识别的情况


我认为这需要使用与原始接口相同的新接口覆盖该接口,但是使用该方法的重载版本来支持mod的需要。这是可能的(或者有其他方法可以实现吗?

您可以实现mod类。然后重写该方法。还要编写另一个方法,该方法将在实现的类中重载该方法。这样,您就不必更改接口。

考虑接口的一种方法是将其视为合同。
实现类必须严格遵守本合同。 这意味着方法签名(包括返回值和参数)必须完全匹配。
接口的整个要点是在不严格了解实现的情况下定义交互

如果您希望实现的交互是不同的,那么您可能正试图以一种非预期的方式使用某些东西

即使可以对接口进行子类化,它也会很快变得混乱。 创建一个新接口(所有其他方法都相同)可能对您最有利。
由于它无法与使用接口A的类进行比较,因此将其完全分离可以避免麻烦。

Mojang/forge团队提供的接口旨在用于Mojang/forge代码中。他们希望返回接口返回的结果类型。如果他们没有按照合同/接口的定义得到,代码将崩溃/无法编译

似乎您正试图将某个接口用于自己的项目/api的特定用途。
考虑编写一个新的界面,专门用于你打算使用它的目的。不要修改核心接口


一个类可以继承多个接口,所以这不是问题。您可以实现forge/mojang接口和您自己的接口。

不同的返回类型是原始返回类型的子类型吗?您不能用返回不同类型的方法重写方法。子类化接口并添加一个新方法,使用不同的名称。更具体一些。这个接口很可能是由minecraft引擎调用的,因此除非您修改它,否则不同的返回类型对调用者没有用处。界面是什么?什么消耗了它?为什么“需要”修改它?如果接口有一个方法,比如,
intgetIntVaue()
您不想尝试使用
double-getIntValue()来覆盖它
将其子类化并添加一个新方法
double-getDoubleValue()