`
--Ewan--
  • 浏览: 689 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

类可以访问它的内部类(和内部类的内部类)的所有成员?!?

阅读更多
对此总是多少有点迷惑——private关键字作用在内部类(假设为A)的成员上时,对于包含该内部类(A)的类(假设为B)来说形同虚设,如果还有一个类(假设为C)包含这个包含类(B)时,那么类A中的private对于C同样形同虚设。
下面的代码证明了这一点。个人理解是:内部类对于 包含它的类 来说毫无隐私——此处包含至少嵌套了一级。
class FirstLevel{

	private class SecondLevel{
		private int i=10;
		private void say(){
			System.out.println("private SecondLevel.say()");
		}
		private class ThirdLevel{
			private int i=12;
			private void say(){
				System.out.println("private ThirdLevel.say()");
			}
		}
	}
	
	void haha(){
		System.out.println("FirstLevel.haha() BEGIN:");
		SecondLevel secondLevel=new SecondLevel();
		SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
		System.out.println("SecondLevel's private i"+secondLevel.i);
		secondLevel.say();
		System.out.println("ThirdLevel's private i :"+thirdLevel.i);
		secondLevel.say();
		System.out.println("FirstLevel.haha() END.\n");
	}
	
	public static void main(String[] arguments){
		FirstLevel firstLevel=new FirstLevel();
		firstLevel.haha();
		FirstLevel.SecondLevel secondLevel=firstLevel.new SecondLevel();
		secondLevel.say();
		FirstLevel.SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
		thirdLevel.say();
	}
}
分享到:
评论

相关推荐

    Java的内部类讲解案例代码(成员内部类、局部内部类、匿名内部类、静态内部类、外部类访问四种内部类、其他类访问四种内部类...)

    内部类的作用域仅限于其外部类,可以访问外部类的成员,同时又能保护类的封装性。 目标: 通过这个源码资源,你将学会以下内容: - 内部类的定义和语法 - 如何在外部类中访问和操作内部类 - 不同类型的内部类(静态...

    e语言-类的私有成员实现从外部访问

    资源介绍: 学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟...

    类的私有成员实现从外部访问

    学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟外部变量的...

    编程语言-Java语言-关于内部类的分类和认识

    Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类是定义在类的内部且与类的实例相关联的类;局部内部类是定义在方法或作用域内的类;匿名内部...

    深入理解Java?内部类

    什么是内部类?  内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附...  (3)、内部类声明成静态的,不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。

    JAVA语法总结 - 内部类

    从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好...内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

    java内部类的使用

    内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明...

    java(Day12)---内部类

    成员内部类 定义的位置:类中,方法以外 静态内部类 定义的位置:类中,方法以外 局部内部类 定义的位置:方法中 匿名内部类 定义的位置:值或实参中 1.2成员内部类 定义位置: 在类中方法以外 语法: 访问权限修饰符 ...

    2. 定义一个Card类,表示扑克牌,该类包括下述成员

    2. 定义一个Card类,表示扑克牌,该类包括下述成员: (1) 有两个private访问权限的字符串变量face和suit。face描述一张牌的牌面值(如:A、K、Q、J、10、9、8、7、6、5、4、3、2等),suit描述一张牌的花色(如:...

    Java的内部类和匿名类剖析

     如果内部类没有指定static修饰符,拥有对外部类的所有成员的完全访问权限,包括实例字段和方法。为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。所以,对一个非静态内部类进行实例化需要采用...

    类中的成员变量

    3种类的成员访问限制符//public 表示全局,公共,类内部外部子类都可以访问; //private表示私有的,只有本类内部可以使用; //protected表示受保护的,只有本类或子类或父类中可以访问;

    Java小白对成员内部类的总结

    有两种命名时期的格式(如何用在下面的 访问成员内部类的访问格式 中介绍) 在其他类中创建成员内部类对象 外部类.内部类 XXX=new 外部类().new 内部类(); //定义一 外部类.内部类 XXX=外部类.new 内部类(); //...

    易语言-类的私有成员实现从外部访问

    学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟外部变量的变量...

    匿名内部类

    所谓匿名内部类(anonymous inner class),是指可以利用内部类创建没有名称的对象,它一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类内的成员,这种类不取名字,而是直接用其父类的名字或者它所...

    探讨Java内部类的可见性

    在Java中,当生成一个内部类的对象时,此对象与制造它的外部类通过外部类的.this保持着联系,因此该内部类对象可以访问其外部类对象的所有成员,包括private成员。  而该内部类对象对于其他类的对象的访问,遵照...

    Student.java

    2:静态内部类可以访问外部类的所有成员和方法 3:成员内部类可以访问外部类的所有属性和方法 OutputStream抽象类中的方法 abstract void write(int n) 写出一个字节的数据 void write(byte[] b) 写出所有...

    【05-面向对象(下)】

    •内部类提供了更好的封装,内部类成员可以直接访问外部类的私有数据,因为内部类被当成其他外部类成员。 •匿名内部类适合用于创建那些仅需要一次使用的类。 非静态内部类 •定义内部类非常简单,只要...

    JAVA基础知识精华总结 收藏

    ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。 构造方法的作用就是初始化。 (2) 静态对象的初始化 程序中主类的静态变量会在main方法执行前初始化。 不仅第一次创建对象时,类中的所有静态变量...

    Java关键字及其作用

    所有类成员的默认访问范围都是package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。 2)protected 受保护的 protected 关键字是可以应用于类、方法或字段(在类中...

Global site tag (gtag.js) - Google Analytics