这和Java中的扩展

Mat*_*t.S -8 java

所以我对过去的测验有疑问.只要C和D在同一个包中,以下代码就会编译

class C {
   int i;
}

class D extends C {
   void m() {
       this.i = 3;
   }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这是真是假?

dar*_*jan 5

它有一个默认的 访问修饰符.

访问修饰符:

  • public 世界级的可见性(所有课程,无处不在),
  • protected 像默认,但也可以扩展类,
  • default(你实际上不会写上面三个中的任何一个) - 包级别可见性.
  • private 班级可见度.

由于您的字段i没有明确写入的访问修饰符,因此暗示它具有默认访问模式.并且在包装内可见.

有关更多信息,请参阅控制对类成员的访问.


关于this关键字 - 它只是对当前对象的重新认识.

由于当前对象的类扩展了C它,它有它的方法和字段.并且因为i在整个包中可见,所以D可以使用它来访问它this.

  • 不,`protected`成员也是包可见的 (2认同)