对Java嵌套类的讨论 - 编程入门网
{
this.jobTitle = jobTitle;
}
public String toString ()
{
return jobTitle;
}
}
class Employee
{
private String name;
private Job [] jobs;
Employee (String name, Job [] jobs)
{
this.name = name;
this.jobs = jobs;
}
String getName ()
{
return name;
}
JobIterator getJobIterator ()
{
return new JobIterator ();
}
class JobIterator
{
private int jobIndex = 0;
public boolean hasMoreJobs ()
{
return jobIndex < jobs.length;
}
public Object nextJob ()
{
return !hasMoreJobs () ? null : jobs [jobIndex++];
}
}
}
class JobIterator3
{
public static void main (String [] args)
{
Job [] jobs = { new Job ("Janitor"), new Job ("Delivery Person") };
Employee e = new Employee ("John Doe", jobs);
System.out.println (e.getName () + " works the following jobs:\n");
Employee.JobIterator eji = e.getJobIterator ();
while (eji.hasMoreJobs ())
System.out.println (eji.nextJob ());
}
}
JobIterator3的输出和JobIterator1、JobIterator2的一样,它使用了类嵌套:Employee类包含有JobIterator类的声明。这样做的结果是,JobIterator不再需要一个构造器,因为JobIterator可直接访问Employee的私有字段job。还有,在JobIterator3的main()方法中,如果需要访问JobIterator,你都要加入一个Employee前缀。由于JobIterator3的JobIterator类不再需要一个构造器和自己的jobs字段,因此源代码要比JobIterator2的清楚一些。 除了令源代码更加清楚之外,类嵌套还有第二个好处。这就是名字的冲突减少了。在列表3的程序中,顶级的类是Job, Employee和JobIterator3。还有一个Employee.JobIterator类。如果我们在与Employee的同一级中插入一个JobIterator接口,我们就会有Job, Employee, JobIterator3和Employee.JobIterator类,以及一个JobIterator接口。由于Employee.JobIterator和JobIterator表示两个不同的名字,因此没有名字冲突。 对Java嵌套类的讨论(5)时间:2010-12-21注意: 如果你编译JobIterator3并且查看得到的class文件,你将会发现有一个名字为Employee$JobIterator.class的文件。该文件包含有嵌套在Employee中的JobIterator类的字节码。要注意其中的“contentrdquo;字符。对于嵌套类,Java的编译器都会产生一个类似的class名,它以外面的类名和“contentrdquo;开头,接着是嵌套类的名字。为什么使用$符号呢?这是因为对于操作系统平台来说,这是一个合法的字符。而“.”通常是用来隔离文件的扩展名字的,通常都不可在文件名中使用。 Java支持哪些嵌套类? Java将嵌套类分成两个主要的分类:嵌套顶级类(nested top-level classes)和内部类(inner classes)。Java还进一步将内部类分为实例内部类(instance inner class) ,本地内部类(local inner class)和匿名内部类(and anonymous inner class)。要掌握嵌套类,你需要懂得每个分类。以下我们就来讨论以下这些分类,首先我们来看一下嵌套顶级类。 嵌套顶级类 当你在其它类的外面声明一个类时,Java就认为该类是一个顶级类。如果你在一个顶级类中声明一个类,并且在该嵌套类的声明前加上static的修饰符,你就得到了一个嵌套顶级类。以下的代码段声明了一个顶级类和一个嵌套顶级类:
就象静态的字段和静态的方法一样(也可称为类字段和类方法),一个嵌套的顶级类也是与对象无关的。考虑以下的代码段:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |