覆盖超级变量Java

时间:2016-06-21 18:38:17

标签: java

我有一个班级Client,其中有一个我无法编辑的变量privilege。但是,我可以编辑扩展Launcher的课程ClientClient中的方法检查权限,我想在该方法之前覆盖privilege变量。

public class Client { // I can't edit this class at all

    private int privilege = 0;

    public void chat(String msg) {
        if (privilege == 3) {
            // send chat packet with privileges to server
        }
    }
}

然后在一个单独的文件中:

public class Launcher extends Client { // I can edit this class
    // This is what I tried... it didn't work
    @Override
    public void chat(String msg) {
        int privilege = 3;
        super.chat(msg);
    }
}

这是我反编译的游戏的一部分,我想覆盖权限变量(作弊),我该如何实现?

2 个答案:

答案 0 :(得分:1)

您可以使用反射来编写private字段。获取field,使其成为accessible,assign您想要的值。可以使用类似的方法来调用私有方法。

@Override
public void chat(String msg)
{
  try {
    Field field = Client.class.getDeclaredField("privilege");
    field.setAccessible(true);
    field.setInt(this, 3);
  }
  catch (Exception ex) {
    throw new RuntimeException("Failed to modify field", ex);
  }
  super.chat(msg);
}

答案 1 :(得分:-1)

int privilege = 3是局部变量,它怎么会影响班级Client

您需要在privilege中为Client实施getter,setter或将变量可见性更改为protected