修改受保护方法中的代码

时间:2014-12-02 05:40:37

标签: java protected

我想知道是否可以覆盖第三方jar文件中的受保护方法。我猜我可以使用反射来调用方法,但是我怎么能完全覆盖它呢?

方法是

protected void a(World world, int i, int j, int k, ItemStack itemstack) {
    if (!world.isStatic && world.getGameRules().getBoolean("doTileDrops")) {
        float f = 0.7F;
        double d0 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
        double d1 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
        double d2 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
        EntityItem entityitem = new EntityItem(world, (double) i + d0, (double) j + d1, (double) k + d2, itemstack);
        entityitem.pickupDelay = 10;
        world.addEntity(entityitem);
    }
}

1 个答案:

答案 0 :(得分:0)

是的,protected方法的意思是它们可以被不同包/模块中的子类实现覆盖(默认访问模式只允许从同一个包中执行)。

然后由子类决定是否要回调到super方法。

所以你可以拥有

class MyVersion extends TheClass {

     @Override
     protected void a(World world, int i, int j, int k, ItemStack itemstack) {
         // do something else
     }

}

当然,更有趣的问题是如何使应用程序的其余部分使用您的新版本而不是原始版本。如果是您的代码驱动此对象的实例化,那么这是没有问题的。否则,您可能必须找到一些配置设置或更改更多代码。