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

问题描述

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

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

//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);
}

}

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

时间: 2024-11-08 20:11:43

java 内部类-为什么外部类能访问内部类的私有成员?的相关文章

java 内部类-在外部类中为什么可以直接访问内部类的私有成员?

问题描述 在外部类中为什么可以直接访问内部类的私有成员? 在外部类中为什么可以直接访问内部类的私有成员?比如,root=root.next,这条语句出现在外部类的方法中,这里,root是定义在外部类中的一个内部类对象,而next是root对象的一个私有属性,为什么可以这样写? 解决方案 内部类是一个特例,相当于友元类(java本身没有友元这个概念) 从语法的角度来说,这样做是方便的.封装性主要是避免调用者随意操作对象的私有成员,调用他们不知道的代码引起问题.但是你定义了外部类,显然内部类也是你定

java内部类 引用外部类对象this问题

问题描述 java内部类 引用外部类对象this问题 在内部类里,想引用外部类的对象,为什么是外部类.this而不是外部类加引用变量,还有.操作应该是成员操作符吧,这样this不就成了外部类成员了 解决方案 你好,实际上我们代指当前类对象的this是个简写形式,完整的形式就是 类名字.this,举个例子来说吧 class OuterClass { private String outAttribute = "我是外部类属性"; public void printOutAttribute

C#箴言之用属性来访问类的私有成员

访问|来访 在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从"private"改为"public"即可:而另一个就是提供公有的成员访问函数来进行访问.那么现在用C#编写程序,就不再需要采用前面所说的两种方法了,而直接使用属性来完成. 首先来看看三种方法的如何实现以及调用的,这里用一个例子来说明,即访问"EmployeeInfo"类的私有成员strName,具体如下表格所示.   pri

C++中用#define访问类的私有成员

我们知道,类的私有成员在类的外部是不能被访问的. 例如有下面的这个简单的类: class ClxECS{private:int iPrivate;}; 那么下面的这个函数是不能通过编译的: void ECS_test(){ClxECS lx;lx.iPrivate = 13; cout << lx.iPrivate << endl;} 但是,我们并不是没有办法来访问类的私有成员. 其实,方法很简单,只要在类的声明前面加上如下一行代码就行了: #define private publ

内部类和外部类的一个问题

问题描述 class Car{class Wheel{}}class PlaneWheel extends Car.Wheel{PlaneWheel(Car car){car.super();//这里怎么理解??}public static void main(String[] args){Car car=new Car();PlaneWheel pw=new PlaneWheel(car);}} 解决方案 也许下面代码更有说服力:引用class Car {public Car() {super

python中的嵌套类(内部类调用外部类中的方法函数)

在为书中版本是3.X的,但2.X不太支持直接调用. 所以,在PYTHON2.X中,要在内部类中调用外部类的方法,就必须得实例化外部类,然后,传入实例进行调用. 花了我两个小时啊,资料没找到,自己一个一个想法调试,真的失败了三四十次,PRINT了N多~~~:) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 4

java学习笔记9--内部类总结

java内部类分为: 非静态内部类.静态内部类.局部内部类.匿名内部类 内部类的共性: (1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 . (2)内部类不能用普通的方式访问.内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 . (3)内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 . java 中的内部类和接口加在一起,可以的解决常被

内部类引用局部变量与外部类成员变量的问题思考

昨天有一个比较爱思考的同事和我提起一个问题:为什么匿名内部类使用的局部变量和参数需要final修饰,而外部类的成员变量则不用?对这个问题我一直作为默认的语法了,木有仔细想过为什么(在分析完后有点印象在哪本书上看到过,但是就是没有找到,难道是我的幻觉?呵呵).虽然没有想过,但是还是借着之前研究过字节码的基础上,分析了一些,感觉上是找到了一些答案,分享一下:也希望有大牛给指出一些不足的地方. 假如我们有以下的代码: interface Printer {      public void print

在Java程序中运行外部类文件

程序 在Java程序中运行外部类文件 一.引言无论是用传统的编程语言(C++.VB等)还是Java语言编程,都经常需要在一个运行的程序中执行另外一个独立的外部程序.例如用Java设计一个IDE程序,那么这个IDE程序就必需能够调式.运行其它独立的外部Java程序.况且直接运行已经存在的外部程序来实现本程序的某些特定的功能,也是提高程序开发效率的一种重要手段.Java2为实现在一个Java程序中运行外部类文件(即Java程序)提供了的两种解决方案,即在同一进程中运行外部类文件和在不同进程中运行外部