0

我对 java 还很陌生,所以我尝试实现一个示例并使用抽象类,但我缺乏 OO 知识让我想知道为什么我不能在扩展它的“具体”类中使用抽象类中的私有变量。

这是我的代码:

abstract class Equation{
    private double[] c;//oefficient
    public static int degree(double[] coeff) {
        return coeff.length;
    }
    public abstract double[] solve();
}

class QuadraticEquation extends Equation{
    public double[] solve() {
        double[] solution;
        double discriminant = c[1]*c[1]-4*c[0]*c[2];
        if (discriminant < 0) {
            solution = new double[] {Double.NaN,Double.NaN};
        }
        else {
            solution = new double[] {(c[1]+Math.sqrt(discriminant))/(2*c[0])
                                    ,(c[1]-Math.sqrt(discriminant))/(2*c[0])};
        }
        return solution;
    }
}

我得到的错误是

 c has private access in Equation

我可以通过创建c一个public变量来解决这个问题,但我想有更好的方法来做到这一点。

底线:如何访问变量c.

4

3 回答 3

3

您正在寻找的解决方案是进行c保护,以便它对子类具有可见性。

于 2013-06-29T22:30:40.370 回答
2

这很简单,

Modifier    Class   Package Subclass World
public       Y         Y       Y      Y
protected    Y         Y       Y      N
no modifier  Y         Y       N      N
private      Y         N       N      N

请参阅表格,private然后检查您的子类是否具有访问权限NO。如果它在同一个包中,则必须使用protected, 或不使用修饰符,但如果您更改包,则无法再访问。

顺便说一句,使用对特定成员有意义的最严格的访问级别。除非您有充分的理由不使用,否则请使用私人,您有理由然后必须使用另一个。

于 2013-06-29T22:38:13.577 回答
0

您可以在抽象类中编写公共 Getter public double[] getC() { return c; }

于 2013-06-29T22:33:42.880 回答