1

给定示例代码:

package com.tt;
class Bigger 
{
     int a = 5;
}

class lower extends Bigger 
{
    void m1() {
        int z = super.a;
    }
}

为什么低级可以访问更大类的变量,即使它们没有受到保护?我指的是这个可见性矩阵

访问修饰符:

         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
4

2 回答 2

4

派生类lower可以访问a超类型上的字段,Bigger因为字段“a”的范围设置为默认范围,包私有。在这种情况下,继承关系不参与对字段的访问。

当没有为字段声明提供范围时,该字段的访问级别默认为包私有。a这是class 上的字段的当前情况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
于 2013-07-24T09:25:13.633 回答
0

如果超类变量不在保护模式下,您可以使用super 关键字访问它们

Class A{
int a;
}
Class B extends A
{
void apply(int c)
{
super.a=c;
}
}

这将在 A 类中设置 a 的值,反之亦然,您可以访问变量.....

于 2013-07-24T09:54:25.300 回答