2011-07-06 20 views
0

我有两个类A和B如下:基本运动在java中

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) 
    } 
} 

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

+0

是您在B类中的主要方法还是仅仅是您已经布置代码段的方式? – DoctorMick

+1

这是功课吗? –

+0

@DoctorMick我的主要方法是在B类 –

回答

3

我没有看到任何B私人构造函数,以便new B()有效+私有字段是同一类的访问

+0

是的。我认为关键在于:薪水可以在班级中获得。 –

3

private适用于类定义之外的东西,类定义中的所有东西都可以看到它们。

mainB的(静态)成员,所以它可以看到私人成员。

2

它是有效的,因为主要类,这意味着所有领域内(甚至私人)都可以看到它。

如果移动主要到另一个类,这将不再有效。

2

专用字段只能从同一个类中访问。所以工资只能从B类访问。

由于您的主要方法在B类中,因此您可以访问它。

2

在第2行的工资是指工资,你在B类中声明,你的主要方法是B类的一部分,因此主要可以看到B.

的任何私人的东西
5

您可以访问B.salary因为你的代码是在类B内部执行。

private(或实际上所有的访问修饰符)的一个常见误解是,它以每个对象为基础进行操作,这是不正确的。 A private字段是私密的全班。所以B每个实例都可以访问对方B对象的salary领域。即使在B中的static代码也可以做到这一点。

另外请注意,你不必要通过引入类A复杂的问题:它对于你的例子没有实际的效果,你可以简单地离开它。

3

每个类都有访问其私处。

+1

在C++中,你的朋友可以访问你的私人部分。 ;-) –

+0

伟大的方式来记住它.... – duffymo

1

每类可以访问它的私有成员。和“薪水”一起在课堂上,以及你的主要方法。这就是为什么主要方法可以访问“薪水”。

0

2号线是一样的这样做:

B bObject = new B(); 
System.out.println(b.salary); 

你可以因为“bObject”是B型的现在你不能做什么访问私有变量是:

A aObject = new A(); 

aObject。bSalary; //如果您将工资变量的名称更改为bSalary