这是一个我无法理解的例子:
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
是私人会员。如何在课外访问?
答案 0 :(得分:1)
我认为班级Secretaire可以访问Personne'members,而不是相反?
在C#中会是这样,但在Java中则不然。
在Java中,同一顶级类中的所有代码都可以访问该顶级类中声明的所有类的所有私有成员(包括顶级类本身)。
来自JLS 6.6.1:
否则,成员或构造函数被声明为private,并且当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。
答案 1 :(得分:1)
Secretaire.nbSecretaire()
是静态方法调用表达式。它不会访问私有nbSecretaire
成员,而是访问方法nbSecretaire()
,其定义未显示。
但是,如果您的Secretaire
类嵌套在Personne
中,则可以从Personne
访问其所有成员,甚至是私有成员。
注意:截至我的回答时,您发布的代码的语法过于严格,无法确定是否属于这种情况。