美文网首页技术栈
2019-02-12——Java 修饰符

2019-02-12——Java 修饰符

作者: 烟雨乱平生 | 来源:发表于2019-02-13 14:52 被阅读0次

    在Java中,修饰符分为四种:

    • public
    • protected
    • default
    • private

    关于四种修饰符的访问权限:

    修饰符 内部类 同包 子类 外部包
    public Y Y Y Y
    protected Y Y Y
    default Y Y
    private Y

    这种权限关系表适用于类的所有成员属性,当然也有例外,比如内部类:

    public class A {
    
        private B b;
    
        private void t(){
            String value = b.value;
        }
    
        private class B{
            private String value;
        }
    }
    

    这里只讨论修饰符的访问权限,可以看到对于B类的私有属性value在该类的外部访问了,即打破了private属性只能在类内部访问的规则。

    为什么外部类能够访问内部类的私有属性?
    这是因为编译器会生成一个package scope的access方法,该方法是一个get方法并且该方法是一个synthetic性质的方法。
    所以外部类对内部类的私有属性的访问就相当于调用了一个get方法,大概情形如下:

    public class A {
    
        private B b;
    
        private void t(){
            String value = b.getValue();
        }
    
        private class B{
            private String value;
            public String getValue(){
                return value;
            }
        }
    }
    

    所以看起来外部类访问内部类的私有属性打破了private的访问权限规则,其实并非如此,而是由编译器提供了一个可以由外部类访问的get方法。外部类通过这个方法访问内部类的私有属性。

    相关文章

      网友评论

        本文标题:2019-02-12——Java 修饰符

        本文链接:https://www.haomeiwen.com/subject/brwheqtx.html