内部类详解————静态内部类
內部類三連擊:
《內部類詳解————匿名內部類》
《內部類詳解————局部內部類》
《內部類詳解————靜態內部類》
定義
靜態內部類,又叫靜態嵌套類或嵌套類。是使用static關鍵字修飾的內部類。
靜態內部類可以用 private 修飾,這非常符合良好的OOM設計。并且由于嵌套類被認為是外部類的一部分,所以不存在產生不可見問題?!稊祿Y構與算法分析—Java語言描述》p50
書寫形式
一般的書寫形式:
public class Outter {/** 嵌套類,public等四種訪問修飾符均可修飾*/public static class Inner {/** 嵌套類內部*/} }接口中的書寫形式:
public interface OutInterface {/** 嵌套類,在接口中定義的任何類都自動的是public和static的,因此這兩個關鍵字都可以省略*/class Inner {public void print() {System.out.println("print()");}} }嵌套類的語法規則
規則一:不能從嵌套類中訪問外部類的非靜態成員。這一點與Java基礎語法中對靜態非靜態語法的相關描述完全一致。
規則二:與普通內部類不同,嵌套類實例化不需要依賴外部類對象,而普通的內部類對象需要與外部類的對象有一種綁定關系。
public class Outter {/** 嵌套類*/public static class Inner {}public static void main(String[] args) {Outter.Inner inner = new Inner();} }規則三:與普通內部類的區別如下:
普通內部類只能包含非靜態變量、非靜態方法、非嵌套類。
靜態嵌套類可以包含靜態和非靜態變量、靜態和非靜態方法、靜態和普通內部類。
(注意:“嵌套類中包含”與規則一中的“嵌套類中訪問”是不同的含義,區別在于“訪問”是嵌套類中調用嵌套類之外定義的成員,而“包含”則表示在嵌套類中定義)
規則四:嵌套類可以定義在接口中,并作為接口的一部分來使用。
《Java編程思想》(第四版,P203)
如果你想要創建某些公共代碼,使得它們可以被某個接口的所有不同實現所共用,那么使用接口內部的嵌套類會顯得很方便。
代碼實例:
/** 接口*/ public interface OutInterface {void method_1();void method_2();/** 嵌套類*/class Inner {public void print() {System.out.println("print something...");}} } /** 實現類 */ public class OutInterfaceImpl implements OutInterface {private OutInterface.Inner inner = new Inner();@Overridepublic void method_1() {inner.print();}@Overridepublic void method_2() {inner.print();}public static void main(String[] args) {OutInterface oif = new OutInterfaceImpl();oif.method_1();oif.method_2();} }輸出結果:
print something... print something...規則五:靜態內部類不會在外部類加載時也執行類加載。這一點可以應用于單例模式。
總之,靜態內部類可以具有一個普通類的所有特性,本質上他們并無二致,而且還可以通過訪問修飾符如private等,來控制訪問權限。
綜上,就是靜態嵌套類的詳細使用,其中需要注意的問題,已經列在規則中,經過博主實操,大概也就這些內容,如有疑問和建議,歡迎文末留言。:)
?
總結
以上是生活随笔為你收集整理的内部类详解————静态内部类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse生成SSH传输密钥并实现G
- 下一篇: LeetCode算法入门- Longe