java中的內部類

ning12發表於2024-04-27

java中的內部類

目錄
  • java中的內部類
      • 1.定義
      • 2.分類
        • 非靜態成員式的內部類
        • 區域性內部類
        • 匿名內部類
        • 靜態成員式內部類
    • 總結

1.定義

  1. 內部類是一個定義在另一個類中的類
  2. 內部類可以把一些資料統一的隱藏起來,從而增強物件導向的封裝性

2.分類

  1. 非靜態成員式的內部類

    1. 非靜態成員式內部類可以訪問該類定義所在的作用域中的所有資料,方法,包括私有資料
    2. 非靜態成員式內部類不能宣告static成員
    3. 非靜態成員式內部類不能在該類定義靜態方法中直接使用
    4. 訪問非靜態成員式內部類:外部類名.內部類 變數 = new 外部類名().new 內部類名()
    5. 非靜態成員式內部類可以實現多繼承
  2. 區域性內部類

    1. 區域性內部類定義在程式碼塊、方法體內
    2. 區域性內部類不能使用,private,public,protected,static修飾
    3. 區域性內部類作用域僅限於當前方法中
    4. 區域性內部類和非靜態成員式內部類一樣,不能擁有靜態成員
    5. 區域性內部類訪問的區域性變數必須是final修飾的,java8以後會自動新增上隱藏式的final
  3. 匿名內部類

    1. 匿名區域性內部類
    public abstract class Person {
        public abstract void sleep();
    }
    
    public class Student extends Person {
    
        @Override
        public void sleep() {
            System.out.println("學生睡覺");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Person p1 = new Person() {
    
                @Override
                public void sleep() {
                    System.out.println("學生睡覺");
                }
            };
    
            p1.sleep();
    
            Person p2 = new Student();
            p2.sleep();
        }
    }
    

    在上面的程式碼中p1物件和p2物件一樣,但是p1物件只能使用一次

    1. 匿名內部類使用前提,必須繼承一個父類,或者去實現一個介面
  4. 靜態成員式內部類

    1. 靜態內部類,場景:如果一個類只想把另一個類隱藏起來,而不想引用外部類物件,類似於工具類
    2. 訪問靜態內部類的方法:外部類名.內部類名 = new 外部類名.內部類名()
    3. 靜態成員式內部類建立例項物件的時候不必建立外部類物件
    4. 靜態成員式內部類可以直接訪問外部類的靜態成員,不能直接訪問外部類的非靜態成員
    5. 外部類可以透過完整的類名直接訪問靜態內部類的靜態成員

總結

內部類的出現是為了減少一個類的使用,即:如果該類只會使用一次,並且他的父類或者要實現的介面,那麼就可以方便的使用內部類,這樣可以讓程式碼的結構更加緊湊

相關文章