我有一个需要修改的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.glThe field A.gl is not visible错误。
我的包中没有写任何吸气剂方法,该怎么办?

谢谢。

注意:我无法重新编译程序包或将B类添加到程序包中。

最佳答案

默认访问说明符为package-private,这意味着与A处于同一包中的类可以使用A的实例访问此变量。

A a = ....
a.gl = ...; // this works.


并且package-private成员(和private成员)不会被继承,只有protectedpublic成员可以继承。

由于A#method()已经在执行赋值操作,因此您可以在super.method()中调用B#method()以获得所需的行为。或者,您应将它们标记为protected

10-07 18:57