2 ggdsn ggdsn 于 2014.01.19 16:35 提问

为什么外部类能访问内部类的私有成员?

在学习单例时发现,外部类可以访问内部类的私有成员
如下面代码所示:

//Initialization on Demand Holder

class Singleton {
private Singleton() {
}

private static class HolderClass {
        private final static Singleton instance = new Singleton();
}

public static Singleton getInstance() {
    return HolderClass.instance;
}

public static void main(String args[]) {
    Singleton s1, s2; 
        s1 = Singleton.getInstance();
    s2 = Singleton.getInstance();
    System.out.println(s1==s2);
}

}

内部类能访问外部类成员比较好理解,但为什么外部类能访问内部类的私有成员呢?

1个回答

u012895763
u012895763   2016.08.21 13:22

在任何情况下,外部类都不能直接访问内部类的成员,必须先获取内部类的引用才行或者如果是静态内部类的话由内部类的类名调用

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
外部类可以访问内部类的私有成员
/** * 外部类可以访问内部类的私有成员 */ package test; public class Test{ int a =1; private static class inner{ private static Test t = new Test(); private static int b = 2; } private class inner2{ //p
内部类是如何访问外部类私有对象的
我们都是知道内部类就是写在一个类里面的类,类里面的类,不知道你们有没有看过javac之后的结果,就是将一个外部类编译后,生成的字节码文件结果public class OutClass{ private String name; private int id; private String address; public class innerClass{ priv
Java内部类为什么可以访问外部类的成员
内部类都持有一个外部类的引用,这个是引用是 外部类名.this。内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。当内部类被定义在局部位置上,只能访问局部中被final修饰的局部变量。 如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。 注意:如果内部类中定义了静态成员,那么该内部类必须是静态的。内部类编译后的文件名为:“外部类名$内部类名
非静态内部类为什么可以访问外部类的静态成员
非静态内部类对象寄生于外部类对象,inn调用test()方法时,知道自己调用的是它寄生的对象所属类的类成员; 在阶段一:类加载的时候没有创建外部类对象,但是方法是知道要调用的是外部类的类成员,已经确定了 在第二阶段:创建非静态内部类对象,该对象必须寄生于外部类对象,它知道要调用自己寄生的这个对象所属的类的类方法,也是确定的 public class TestOutInn { pub
Java基础,外部类能够访问内部类的私有静态字段。
外部类能够访问内部类的私有静态字段。 public class Singleton { private Singleton() { } public static Singleton getInstance() { return SingletonHolder.sInstance; } private static clas
深入理解Java中为什么内部类可以访问外部类的成员
内部类简介 虽然Java是一门相对比较简单的编程语言,但是对于初学者, 还是有很多东西感觉云里雾里, 理解的不是很清晰。内部类就是一个经常让初学者感到迷惑的特性。 即使现在我自认为Java学的不错了, 但是依然不是很清楚。其中一个疑惑就是为什么内部类对象可以访问外部类对象中的成员(包括成员变量和成员方法)? 早就想对内部类这个特性一探究竟了,今天终于抽出时间把它研究了一下。 内
外部类是否可以访问内部类private元素
根据实验我发现外部类是可以访问的 class Parcel4{ private class PContents implements Contents{ private int i =11; public int value(){return i;} } public Contents contents(){ return new PContents(); } p
震惊!外部类可以访问内部类private变量
在讲Singleton时我举例时用过这样一段代码: public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){
内部类和外部类之间互相访问
内部类与外部类之间的成员互相访问 内部类可以访问外部类的任何成员,包括private成员。 外部类访问内部类的成员需要创建内部类的对象,之后可以访问内部类的任何成员,包括private成员,需要注意的是成员内部类不可以有静态成员。 当外部类的成员和内部类的成员重名时单单用this是区分不了的。在内部类中访问外部类的成员时可以用如下语法区分 .this.;
外部类能访问内部类的成员
外部类能访问内部类的成员,内部类的一些知识  成员内部类:  相当于类的非静态成员,可以用权限修饰符来修饰,包括private、protected、public.  1、定义成员内部类  class Outter { //非静态内部类 class Inner { /