为了账号安全,请及时绑定邮箱和手机立即绑定

为什么外部Java类可以访问内部类私有成员?

为什么外部Java类可以访问内部类私有成员?

ibeautiful 2019-07-08 16:43:46
为什么外部Java类可以访问内部类私有成员?我注意到,外部类可以访问内部类、私有实例变量。这怎麽可能?下面是演示相同的示例代码:class ABC{     class XYZ{         private int x=10;     }     public static void main(String... args){         ABC.XYZ xx = new ABC().new XYZ();         System.out.println("Hello :: "+xx.x); ///Why is this allowed??     }}为什么允许这种行为?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

内部类只是一种干净地分离一些真正属于原始外部类的功能的方法。当您有两个需求时,它们将用于:

  1. 如果在单独的类中实现的话,外层类中的某些功能将是最明确的。
  2. 尽管它位于一个单独的类中,但它的功能与外部类的工作方式密切相关。

考虑到这些需求,内部类可以完全访问它们的外部类。因为他们基本上是外部类的成员,所以他们有权访问外部类的方法和属性-包括私营化。


查看完整回答
反对 回复 2019-07-08
?
HUX布斯

TA贡献1876条经验 获得超6个赞

如果您想隐藏内部类的私有成员,您可以与公共成员定义一个接口,并创建一个实现此接口的匿名内部类。下面的例子:

class ABC{
    private interface MyInterface{
         void printInt();
    }

    private static MyInterface mMember = new MyInterface(){
        private int x=10;

        public void printInt(){
            System.out.println(String.valueOf(x));
        }
    };

    public static void main(String... args){
        System.out.println("Hello :: "+mMember.x); ///not allowed
        mMember.printInt(); // allowed
    }}


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 2518 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信