面試例題1:請說明static nested class和inner class的不同。
答案:
1.nested(嵌套)class(一般是C++的說法)
nested class是合成型聚集關系(Composite Aggregation)的另一種表達方式,也就是說nested class也可以用Aggregation表達出來。但是,nested class更加精確地表達了一種專用的、緊耦合的關系,尤其在代碼生成時,nested class在Java中映射成inline class。比如,計算機專用開關電源類可以作為計算機類的nested class,但是,電池組類就不一定適合作為計算機類的nested class,因為,電池組類表述的是一個過于通用的對象,可能還被包含(Aggregation)于模型中的其他設備對象。class A nested in class B,則說明A是一個nested class,一般A是用來完成B中的某種重要功能的。
2.inner class(一般是Java的說法)
Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。
靜態(tài)內(nèi)部類(inner class)意味著:創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象;不能從一個static內(nèi)部類的一個對象訪問一個外部類對象。
面試例題2:關于下面類的定義,以下哪種說法是正確的?[研華科技2005年11月面試題]
public class Droitwich{
class one{
private class two{
public void main(){
System.out.println("two");
}
}
}}
A.此代碼不能編譯成功,因為該類嵌套了不止一層
B.此代碼不能編譯通過,因為class two是私有的
C.此代碼可以編譯通過,并且在運行的時候輸出字符串two
D.此代碼編譯沒有錯誤
解析:
內(nèi)部類或嵌套類在類層級上沒有限制,所以選項A是錯誤的。
內(nèi)部類可以是私有類,所以選項B也是錯誤的。
選項C的main方法不是public static void main的,并且假設命令行是java Droitwich,它不能在任何地方被調(diào)用。
答案:D