Java 重写子类中的方法

Java 重写子类中的方法,java,class,methods,subclass,minecraft,Java,Class,Methods,Subclass,Minecraft,我正在试着对minecraft src进行一些改动。我试图重写类中的方法,这样就不必编辑原始类 在常规类中,我想更改此方法: public void sendChatMessage(String par1Str) { this.sendQueue.addToSendQueue(new Packet3Chat(par1Str)); } 在我的子类中,我有以下代码: package cobalt.gui; import cobalt.hacks.*; import net.minecra

我正在试着对minecraft src进行一些改动。我试图重写类中的方法,这样就不必编辑原始类

在常规类中,我想更改此方法:

public void sendChatMessage(String par1Str)
{
    this.sendQueue.addToSendQueue(new Packet3Chat(par1Str));
}
在我的子类中,我有以下代码:

package cobalt.gui;

import cobalt.hacks.*;
import net.minecraft.client.Minecraft;
import net.minecraft.src.EntityClientPlayerMP;
import net.minecraft.src.NetClientHandler;
import net.minecraft.src.Session;
import net.minecraft.src.World;



public class Console extends EntityClientPlayerMP {

    public Console(Minecraft par1Minecraft, World par2World,
            Session par3Session, NetClientHandler par4NetClientHandler) {
        super(par1Minecraft, par2World, par3Session, par4NetClientHandler);
    }

    @Override
    public void sendChatMessage(String par1Str) {

        if (par1Str.startsWith(".help")) {
                    //Do stuff
            return;
        }
    }
}
根据我的理解,无论何时调用一个方法,它都应该被“重定向”以便子类处理?(告诉我是否我错了哈)

如果我修改原始类,if语句确实可以正常工作


多谢各位

只有当minecraft代码的其余部分开始使用您的类,
控制台
,而这意味着使用
EntityClientPlayerMP
,这才有效如果没有该,将不会调用函数


如果要更改游戏的行为,最简单的方法是更改
EntityClientPlayerMP
本身。如果您想在代码中的其他地方使用修改后的类
控制台
,那么您所做的就可以了。

这取决于实际的对象类型。如果对象的类型为
Console
,例如
EntityClientPlayerMP obj=new Console(..)
obj.sendChatMessage(..)
它将工作。但是,如果对象本身的类型是EntityClientPlayerMP,比如
new EntityClientPlayerMP(..)
它将不起作用

>,根据我的理解,无论何时调用一个方法,都应该“重定向”子类来处理它?否,仅当调用子类的方法时(取决于调用该方法的类的对象),控件才会相应地“重定向”。例如,如果您在基类的对象上调用方法,则将调用基类版本。