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