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

为什么外部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??
    }}

为什么允许这种行为?


ibeautiful
浏览 2519回答 3
3回答

婷婷同学_

内部类只是一种干净地分离一些真正属于原始外部类的功能的方法。当您有两个需求时,它们将用于:如果在单独的类中实现的话,外层类中的某些功能将是最明确的。尽管它位于一个单独的类中,但它的功能与外部类的工作方式密切相关。考虑到这些需求,内部类可以完全访问它们的外部类。因为他们基本上是外部类的成员,所以他们有权访问外部类的方法和属性-包括私营化。

HUX布斯

如果您想隐藏内部类的私有成员,您可以与公共成员定义一个接口,并创建一个实现此接口的匿名内部类。下面的例子: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     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java