java中的基本练习

cra*_*ove 0 java

我有两个A和B类如下:

public class A {
    private int salary = 0; 

    protected void calculate() {
        salary = 400;
    }

    protected A() {
        calculate();
    }   
}

public class B extends A {
    private int salary = 0; // (1)

    protected void calculate() {
        System.out.println("calculating salary...");
        salary = 700;   
    }

    public static void main(String[] args) {
        System.out.println(new B().salary); // (2)  
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑第(2)行:我不明白为什么new B().salary有效,因为第(1)行中的工资的说明符是private.你能帮我解释一下吗?

Joa*_*uer 5

您可以访问,B.salary因为您的代码在类中执行B.

private实际上(或所有访问修饰符)的一个常见误解是它基于每个对象的行为,这是不正确的.一个private字段对整个类都是私有.因此每个实例都B可以访问salary每个其他B对象的字段.甚至static代码都B可以做到这一点.

另外请注意,通过介绍课程,你不必要地使事情变得复杂A:它对你的例子没有实际影响,你可以简单地把它留下来.