即使没有受保护,类如何访问其超类变量?

时间:2013-07-24 09:23:26

标签: java package visibility private

给出示例代码:

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

2 个答案:

答案 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的值  反之亦然,你可以访问变量.....