对此总是多少有点迷惑——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语言中的内部类根据定义的位置和访问权限可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类是定义在类的内部且与类的实例相关联的类;局部内部类是定义在方法或作用域内的类;匿名内部...
什么是内部类? 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附... (3)、内部类声明成静态的,不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。
从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好...内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。
内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明...
成员内部类 定义的位置:类中,方法以外 静态内部类 定义的位置:类中,方法以外 局部内部类 定义的位置:方法中 匿名内部类 定义的位置:值或实参中 1.2成员内部类 定义位置: 在类中方法以外 语法: 访问权限修饰符 ...
2. 定义一个Card类,表示扑克牌,该类包括下述成员: (1) 有两个private访问权限的字符串变量face和suit。face描述一张牌的牌面值(如:A、K、Q、J、10、9、8、7、6、5、4、3、2等),suit描述一张牌的花色(如:...
如果内部类没有指定static修饰符,拥有对外部类的所有成员的完全访问权限,包括实例字段和方法。为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。所以,对一个非静态内部类进行实例化需要采用...
3种类的成员访问限制符//public 表示全局,公共,类内部外部子类都可以访问; //private表示私有的,只有本类内部可以使用; //protected表示受保护的,只有本类或子类或父类中可以访问;
有两种命名时期的格式(如何用在下面的 访问成员内部类的访问格式 中介绍) 在其他类中创建成员内部类对象 外部类.内部类 XXX=new 外部类().new 内部类(); //定义一 外部类.内部类 XXX=外部类.new 内部类(); //...
学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟外部变量的变量...
所谓匿名内部类(anonymous inner class),是指可以利用内部类创建没有名称的对象,它一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类内的成员,这种类不取名字,而是直接用其父类的名字或者它所...
在Java中,当生成一个内部类的对象时,此对象与制造它的外部类通过外部类的.this保持着联系,因此该内部类对象可以访问其外部类对象的所有成员,包括private成员。 而该内部类对象对于其他类的对象的访问,遵照...
2:静态内部类可以访问外部类的所有成员和方法 3:成员内部类可以访问外部类的所有属性和方法 OutputStream抽象类中的方法 abstract void write(int n) 写出一个字节的数据 void write(byte[] b) 写出所有...
•内部类提供了更好的封装,内部类成员可以直接访问外部类的私有数据,因为内部类被当成其他外部类成员。 •匿名内部类适合用于创建那些仅需要一次使用的类。 非静态内部类 •定义内部类非常简单,只要...
※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。 构造方法的作用就是初始化。 (2) 静态对象的初始化 程序中主类的静态变量会在main方法执行前初始化。 不仅第一次创建对象时,类中的所有静态变量...
所有类成员的默认访问范围都是package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。 2)protected 受保护的 protected 关键字是可以应用于类、方法或字段(在类中...