`
--Ewan--
  • 浏览: 715 次
  • 性别: 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内部类总结(含概念和实例)

    2. 局部内部类:在方法中定义的内部类,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。 3. 静态内部类:静态内部类是指在外部类的静态成员中...

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

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

    java 利用反射获取内部类静态成员变量的值操作.docx

    它可以访问外部类的所有成员(包括私有成员),同时也可以被外部类所访问。 2. **静态成员变量**:静态成员变量是类级别的变量,可以通过类名直接访问,不需要创建类的实例。 3. **反射**:反射是在运行时检查类、...

    内部类 匿名内部类 内部接口 对比说明

    内部类能够自由地访问外部类的所有成员,包括私有成员,而外部类无法直接访问内部类的成员。这种特性使得内部类可以作为实现某些特定功能的工具,同时保持外部类的简洁性。 内部类有四种主要类型: 1. **成员内部...

    内部类分类及应用

    外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。 二、静态嵌套类 静态嵌套类是指使用static关键字修饰的内部类。静态嵌套类可以访问外部类的静态成员变量,但不能访问非静态成员变量。...

    Java 深入理解嵌套类和内部类

    Java 嵌套类和内部类详解 ...* 内部类可以访问外部类的成员变量和方法,但外部类不能直接访问内部类的成员变量和方法。 嵌套类和内部类是 Java 中一种非常重要的编程技术,可以使得代码更加简洁、灵活和可维护。

    Java4Android 35_内部类和匿名内部类

    - 内部类可以访问外部类的所有成员,包括私有成员,这是因为内部类对象拥有对外部类对象的隐式引用。 - 匿名内部类不能包含静态成员(除了final static变量)。 - 匿名内部类不能有构造器,但可以通过初始化块来传递...

    从零开始学JAVA第12章_内部类.ppt

    在外部类外访问内部类可以使用外部类对象来创建内部类对象,然后使用内部类对象来访问内部类的成员变量和成员方法。 创建非静态内部类的基本语法如下所示: class Wai { class Nei { // 内部类成员 } // 外部...

    Java语法总结 - 内部类

    内部类是Java语言中的一种特殊类别,它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。每种内部类都有其特点和用途。

    java 内部类使用(内部匿名类)

    非静态内部类拥有对外部类的引用,可以直接访问外部类的所有成员,包括私有成员。而静态内部类不持有对外部类的引用,因此只能访问外部类的静态成员。 2. **内部匿名类**:内部匿名类没有名字,通常用于创建一次性...

    浅谈内部类与静态内部类的应用

    它可以访问外部类的所有成员,包括私有成员,这是因为内部类持有对外部类的隐式引用。这种访问权限使得内部类可以方便地实现一些复杂的逻辑,如事件监听器。但需要注意的是,由于这种紧密耦合,内部类实例不能独立于...

    java 成员内部类的使用规范

    Java成员内部类是一种在类内部定义的类,它可以访问外部类的所有成员,包括私有成员。成员内部类的使用在Java编程中具有独特的价值,它能够帮助我们更好地封装代码,提高代码的组织性和可读性。以下是关于Java成员...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...

    内部类的分类及各自用法

    成员内部类(也称为非静态内部类)是定义在一个外部类中的成员类,它可以访问外部类的所有成员变量和方法,包括私有成员。成员内部类的一个显著特点是它与外部类有着密切的联系,这使得它非常适合用来表达一种“整体...

    JAVA内部类总结

    3. **外部类访问内部类**:外部类可以通过“外部类对象.new 内部类()”的方式创建内部类对象。 4. **内部类访问外部类**:非静态成员内部类可以通过`this`关键字访问外部类中的成员变量和方法。如果外部类的方法中...

    java内部类详解

    - 内部类可以访问外部类的所有成员,但外部类只能通过实例化内部类来访问内部类的公共成员。 - 静态内部类和成员内部类在内存管理上有差异,静态内部类不会引起外部类的实例化,而成员内部类会。 - 匿名内部类不能...

    java基础第七章内部类与异常类.doc

    内部类和外嵌类之间存在着紧密的关系:内部类可以访问外嵌类的成员变量和方法,而外嵌类也可以使用内部类声明的对象作为其成员。内部类的类体中不能声明静态成员变量和静态方法。 匿名类是一种特殊的内部类,它可以...

    java 匿名内部类的使用规范

    - **非静态成员**:匿名内部类拥有对外部类的隐式引用,可以访问外部类的非静态成员,但必须通过`OuterClass.this`来明确指出。 3. **局部变量的final限制** 如果匿名内部类需要访问局部变量,那么这个局部变量...

    接口,内部类,抽象类概念和区别

    内部类是定义在一个类内部的类,它可以访问外部类的所有成员,包括私有成员。内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部...

    讲解Java中如何构造内部类对象以及访问对象

    在Java编程语言中,内部类(也称为嵌套类)是一种特殊类型的类,它可以被定义在一个外部类的内部。内部类有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。本篇将主要讨论如何构造内部类对象以及如何...

Global site tag (gtag.js) - Google Analytics