在教授Java時,我經常發現學生嘗試在方法中聲明其它的方法。不過,與Pascal語言不同--Pascal答應嵌套聲明過程PRocedures(與方法類似),而Java是不答應這樣做的。對于以下的代碼,嘗試在outerMethod()中聲明innerMethod()方法,編譯時將會通不過。
void outerMethod ()不過,由Java語言規范1.1開始,Java就支持類嵌套;Java編譯器答應一個類出現在另一個類中。以下的代碼段就展示了如何在outerClass類中嵌套innerClass類。
class outerClass為什么Java支持類嵌套,還有Java支持哪些類嵌套?以下的部分將會回答這些問題,當你讀完這篇文章,你就會學習到類嵌套的相關知識,并且運用它來寫出強大的Java程序。首先我們先來看一下為什么Java支持類嵌套。
注重:在發布JDK1.1后,Sun發布了內部類規范的文檔。該文檔談到嵌套頂級類和內部類的運用。在讀完這篇文章后,我強烈建議你瀏覽這些文檔。
  為什么Java支持類嵌套?
  Java并非一定要支持類嵌套。實際上,假如你看過內部類規范文檔,你將會發現類嵌套的應用在哪里。不過,Java支持類嵌套至少有兩個好處:
  .令源代碼更加清楚
  .減少命名的沖突
通過類嵌套可以令源代碼變得更為清楚,因為你聲明了一個包含有一些對象的類,它必須可以治理和答應類中的方法來直接訪問對象的字段,以及調用對象的方法--即使是外部類中的私有字段和方法。要理解這個好處,可用以下的一個例子說明,在這個程序中要循環遍歷一個Employee對象中的Job對象:
Listing 1. JobIterator1.java
// JobIterator1.java
class Job
{
private String joBTitle;
Job (String jobTitle)
{
this.jobTitle = jobTitle;
}
public String toString ()
{
return jobTitle;
}
}
class Employee
{
private String name;
private Job [] jobs;
private int jobIndex = 0;
Employee (String name, Job [] jobs)
{
this.name = name;
this.jobs = jobs;
}
String getName ()
{
return name;
}
boolean hasMoreJobs ()
{
return jobIndex < jobs.length;
}
Job nextJob ()
{
return !hasMoreJobs () ? null : jobs [jobIndex++];
}
}
class JobIterator1
{
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");
while (e.hasMoreJobs ())
System.out.println (e.nextJob ());
}
}
運行后, JobIterator1產生如下的輸出:
John Doe works the following jobs:
   Janitor
   Delivery Person
JobIterator1包含有Job, Employee和JobIterator1類。Job封裝了一個job的title,而Employee封裝了一個員工的名字以及該員工所做工作的一個數組。JobIterator1包含有一個main()的方法用來創建Job和Employee對象,并且打印出該員工的名字和工作。
Employee類中包含有方法hasMoreJobs()和nextJob()。這兩個方法構成了一個循環。當一個Employee對象初始化時,在私有jobs數組中的一個內部索引被設置為0。假如該索引的值比jobs數組的長度少,hasMoreJobs()方法返回一個布爾值true。nextJob()使用該索引值由數組中返回一個Job對象--并且增加該索引的值,以便下一次調用nextJob()時返回下一個job對象的一個引用。
新聞熱點
疑難解答