对Java嵌套类的讨论 - 编程入门网
LevelClass
{
static int staticField;
int instanceField;
static class NestedTopLevelClass
{
static
{
System.out.println ("Can access staticField " + staticField);
// System.out.println ("Cannot access instanceField " + instanceField);
}
{
System.out.println ("Can access staticField " + staticField);
// System.out.println ("Cannot access instanceField " + instanceField);
}
}
}
对Java嵌套类的讨论(6)时间:2010-12-21在上面NestedTopLevelClass类的类初始化和对象初始化代码块中,你可以访问TopLevelClass的staticField变量。不过你在这两个代码块中都不能访问instanceField变量。因为NestedTopLevelClass和任何的TopLevelClass对象都是无关的,所以NestedTopLevelClass 不能访问TopLevelClass的instanceField变量。 警告:一个嵌套顶级类不能访问任何外部类的实例成员(包括字段和方法)。 虽然NestedTopLevelClass不能访问TopLevelClass的实例字段,但是static的修饰符并不会妨碍NestedTopLevelClass声明自己的实例字段,以及创建NestedTopLevelClass对象。列表4的代码就是一个很好的例子: Listing 4. NestedTopLevelClassDemo.java
在运行后,NestedTopLevelClassDemo产生以下的输出: 5 NestedTopLevelClassDemo的main()方法创建了一个NestedTopLevelClass变量--ntlc。声明该变量的语法和列表3的一样(Employee.JobIterator eji = e.getJobIterator ())。 通常,当你需要一个嵌套类的变量时,要在该嵌套类名的前面加入所有外部类的名字,并且用“.”将它们分开。用new关键字声明该嵌套类的时候也要这样做。 这时,你可能想知道你是否可以在一个嵌套顶级类中声明一个顶级嵌套类。还有,如果两个不同的外部类声明了同样的字段变量名,但该变量的类型或者初始化值是不同的?要解答这些问题,可看列表5: Listing 5. NestingAndShadowingDemo.java
在运行时,NestingAndShadowingDemo产生以下的输出: a = 2 b = 3 NestingAndShadowingDemo可以编译运行证明你可以在顶级嵌套类中嵌套顶级嵌套类。结果也显示了NestedTopLevelClass的一个字段屏蔽了TopLevelClass的字段。结果是打印出NestedTopLevelClass的字段内容。 使用嵌套顶级类,你不可以访问外部类的实例字段或者调用该类的实例方法。要访问实例成员,Java支持内部类。内部类和嵌套顶级类相似,不同的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |