覆盖子类中的方法

时间:2012-12-27 05:28:54

标签: 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.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语句可以正常工作。

非常感谢!

2 个答案:

答案 0 :(得分:2)

如果其余的Minecraft代码开始使用您的类,Console,那么它只能用于,这意味着使用EntityClientPlayerMP没有,您的功能将不会被调用

如果你想改变游戏的行为,最简单的方法就是改变EntityClientPlayerMP本身。如果你想在代码中的其他地方使用修改后的类Console,那么你做的很好。

答案 1 :(得分:0)

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