使用超类私有成员(Java)



我已经从Java中的类构建了一个子类,该子类具有我想在子类中访问的私有方法,我无法更改或编辑超类。问题当然是它们是私人的。假设我自己编写了超类,并且由于某些原因这些方法必须是私有的。我可以在子类中复制代码。但是,在编写子类时,是否有更好的方法(不产生如此多的代码行)能够使用它们?

忽略你想要这样做的原因可能非常糟糕(私有变量的使用没有契约,所以不能保证它们不会改变,或者完全消失!),你可能可以使用反射做你想做的事情:

使用

:
http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html getDeclaredField(以)
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html种setAccessible(布尔)
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Field.html get (java . lang . object)

Class c = object.getClass();
Field field = c.getDeclaredField("somePrivateInstanceVariable");
field.setAccessible(true);
Object someValue = field.get(object);

我只是想强调你应该考虑做这件事的原因,然后决定不做!如果您拥有要扩展的代码,请考虑是否应该将字段改为protected而不是private。请记住,钩入不应该访问的代码违反了OOP原则(您绕过了封装),并且不能保证您的应用程序所依赖的代码不会在库的更新中消失(因此您也将自己锁定在库的固定版本中)。

所以您尝试使用"extends"从超类继承方法。当然它们是私有的,但你可以在子类中使用它们。使它们抽象将迫使您私下重写每一个,我看没有其他选择。

创建超类方法的protected。它只能从sub-class和package访问。

private修饰符只能用in类访问。

在这种情况下,您应该将私有方法声明为protected。

最新更新