会员,班级,可访问性澄清

时间:2015-03-29 13:19:39

标签: java

这是一个我无法理解的例子:

abstract class Personne { 
    protected static int nbPersonnes=0;

    static void nbpersonnes (){
    System.out.println(
    “\n Nombre d’employés :“ + nbPersonnes +
    “\n Nombre de secretaires  : “ + Secretaire.nbSecretaire() +

    }

第二节课是Secretaire

class Secretaire extends Personne {        
       private String numBureau;
       private static int nbSecretaires; 
       Secretaire (String nom, String prenom, String rue,String ville,String numBureau) {
          super(nom,prenom,rue,ville);
          this.numBureau=numBureau;
          nbSecretaires++;}

班级Personne如何访问私人会员 Secretaire.nbSecretaire()

我认为班级Secretaire可以访问Personne成员,而不是相反? nbSecretaires是私人会员。如何在课外访问?

2 个答案:

答案 0 :(得分:1)

  

我认为班级Secretaire可以访问Personne'members,而不是相反?

在C#中会是这样,但在Java中则不然。

在Java中,同一顶级类中的所有代码都可以访问该顶级类中声明的所有类的所有私有成员(包括顶级类本身)。

来自JLS 6.6.1

  

否则,成员或构造函数被声明为private,并且当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。

答案 1 :(得分:1)

Secretaire.nbSecretaire()静态方法调用表达式。它不会访问私有nbSecretaire成员,而是访问方法nbSecretaire(),其定义未显示。

但是,如果您的Secretaire类嵌套在Personne中,则可以从Personne访问其所有成员,甚至是私有成员。

注意:截至我的回答时,您发布的代码的语法过于严格,无法确定是否属于这种情况。