我有一个需要修改的Java公共类(只有一种方法)。该类位于包中,因此我正在编写一个新类,该类扩展了第一个类并覆盖了我需要更改的方法。
A类是
public class A {
GL gl;
GLU glu;
PGraphicsOpenGL pgrap;
//other fields
//constructor
public void method() {
this.gl = pgrap.gl;
this.glu = pgrap.glu;
//something else I don't want in class B
}
}
B类就像
public class B extends A {
//constructor that recalls super()
public void method() {
super.gl = pgrap.gl;
super.glu = pgrap.glu;
}
}
但出现
super.gl = pgrap.gl
:The field A.gl is not visible
错误。我的包中没有写任何吸气剂方法,该怎么办?
谢谢。
注意:我无法重新编译程序包或将B类添加到程序包中。
最佳答案
默认访问说明符为package-private
,这意味着与A
处于同一包中的类可以使用A
的实例访问此变量。
A a = ....
a.gl = ...; // this works.
并且
package-private
成员(和private
成员)不会被继承,只有protected
和public
成员可以继承。由于
A#method()
已经在执行赋值操作,因此您可以在super.method()
中调用B#method()
以获得所需的行为。或者,您应将它们标记为protected
。