為什麼內部類中有static成員時內部類也必須宣告為static
阿新 • • 發佈:2018-12-26
如果A和B類關係緊密,且A類的主要作用是幫助完成B類的實現,這時可將A類作為B類的內部類,兩個類可以互相訪問各自的私有成員,這樣就方便B類的設計,使B類更加自給自足(self contained)。http://www.tanhuanyao.com http:// tanhuanyao.com http://www.bianshayao.com/ http://bianshayao.com/這是我理解的內部類產生的原因,有點類似於C++中的友元類 A類作為B類的內部類,便是B類的一份子,地位上和B類的屬性和方法相當,此時A類便有static和非static之分了,這就是為什麼只有內部類的類本身才有static的說法的原因。內部類宣告為static和普通類的成員為static的含義一樣,都是表示被宣告為static的東西屬於類範疇,不依賴於類的具體物件。如果內部類是非static的,那麼這個內部類就依賴於外部類的具體物件,在該內部類中可以呼叫外部類的非static方法;如果內部類是static的,即該內部類屬於外部類的類範疇,不依賴於外部類的具體物件,那麼該內部類只能呼叫外部類的static方法,因為外部類的非static方法依賴於外部類的具體物件。這和普通類中static方法只能訪問static的屬性和方法的道理是一樣的。那麼為什麼規定內部類中如果出現了static方法,該內部類也必須宣告為static呢?內部類中的static方法表明該方法不依賴於內部類的具體物件,屬於內部類的類範疇,假設此時內部類為非static的,那麼內部類物件的產生就依賴於外部類物件,有一個外部類物件,才能有一個與之對應的內部類物件,而內部類物件中的static方法不依賴於內部類物件,所以使用該static方法便沒有必要建立具體的內部類物件,如果該static方法確有其存在的意義,那就說明該內部類完全沒有必要是非static的,java規定這時該內部類必須是static的。