给出示例代码:
package com.tt;
class Bigger
{
int a = 5;
}
class lower extends Bigger
{
void m1() {
int z = super.a;
}
}
为什么下层人员可以访问Bigger类的变量而他们没有受到保护? 我正在引用这个可见性矩阵
访问修饰符:
Same Class Same Package Subclass Other packages
public Y Y Y Y
protected Y Y Y N
Default Y Y N N
private Y N N N
答案 0 :(得分:4)
派生类lower
可以访问超类型a
上的字段Bigger
,因为字段“a”的范围设置为默认范围,包为private。在这种情况下,继承关系不会参与对字段的访问。
如果没有为字段声明提供范围,则字段的访问级别默认为package private。这是类a
上的字段Bigger
的当前案例。这会在同一个包中授予类,例如lower
访问该字段。
在您的表格中,该字段属于此访问级别:
Same Class Same Package Subclass Other packages
public Y Y Y Y
protected Y Y Y N
Default Y Y <-- Here N N
private Y N N N
答案 1 :(得分:0)
如果使用 super ,超级变量未处于保护模式,则可以访问它们 关键字
Class A{
int a;
}
Class B extends A
{
void apply(int c)
{
super.a=c;
}
}
这将设置A类中a的值 反之亦然,你可以访问变量.....