java如何定義內(nèi)部類(lèi)

小億
80
2024-01-16 18:07:11

在Java中,可以通過(guò)在一個(gè)類(lèi)的內(nèi)部定義另一個(gè)類(lèi)來(lái)創(chuàng)建內(nèi)部類(lèi)。內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的成員變量和方法,包括私有成員。

定義內(nèi)部類(lèi)的語(yǔ)法如下:

class OuterClass {
    // 外部類(lèi)的成員變量和方法
    
    class InnerClass {
        // 內(nèi)部類(lèi)的成員變量和方法
    }
}

在上面的代碼中,OuterClass是外部類(lèi),InnerClass是內(nèi)部類(lèi)。

內(nèi)部類(lèi)可以分為四種類(lèi)型:成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)、匿名內(nèi)部類(lèi)和靜態(tài)內(nèi)部類(lèi)。

  1. 成員內(nèi)部類(lèi):成員內(nèi)部類(lèi)是在一個(gè)類(lèi)的內(nèi)部定義的類(lèi)。它具有與外部類(lèi)相同的作用域,可以訪問(wèn)外部類(lèi)的所有成員。要?jiǎng)?chuàng)建成員內(nèi)部類(lèi)的對(duì)象,必須先創(chuàng)建外部類(lèi)的對(duì)象。
class OuterClass {
    // 外部類(lèi)的成員變量和方法
    
    class InnerClass {
        // 內(nèi)部類(lèi)的成員變量和方法
    }
    
    public static void main(String[] args) {
        OuterClass outer = new OuterClass(); // 創(chuàng)建外部類(lèi)的對(duì)象
        InnerClass inner = outer.new InnerClass(); // 創(chuàng)建內(nèi)部類(lèi)的對(duì)象
    }
}
  1. 局部?jī)?nèi)部類(lèi):局部?jī)?nèi)部類(lèi)是在一個(gè)方法或者代碼塊內(nèi)定義的類(lèi)。它只在定義它的方法或者代碼塊內(nèi)可見(jiàn)。局部?jī)?nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的成員,但只能訪問(wèn)final修飾的局部變量。
class OuterClass {
    // 外部類(lèi)的成員變量和方法
    
    public void method() {
        // 方法內(nèi)的局部變量
        final int x = 10;
        
        class LocalInnerClass {
            // 局部?jī)?nèi)部類(lèi)的成員變量和方法
            public void printX() {
                System.out.println(x); // 可以訪問(wèn)外部類(lèi)的成員變量
            }
        }
        
        LocalInnerClass inner = new LocalInnerClass(); // 創(chuàng)建局部?jī)?nèi)部類(lèi)的對(duì)象
        inner.printX(); // 調(diào)用局部?jī)?nèi)部類(lèi)的方法
    }
}
  1. 匿名內(nèi)部類(lèi):匿名內(nèi)部類(lèi)是沒(méi)有名字的內(nèi)部類(lèi)。它通常用來(lái)實(shí)現(xiàn)一個(gè)接口或者繼承一個(gè)類(lèi),并且只使用一次。
interface MyInterface {
    void doSomething();
}

class OuterClass {
    // 外部類(lèi)的成員變量和方法
    
    public void method() {
        MyInterface inner = new MyInterface() {
            // 匿名內(nèi)部類(lèi)的實(shí)現(xiàn)
            public void doSomething() {
                // 實(shí)現(xiàn)接口方法的具體邏輯
            }
        };
        
        inner.doSomething(); // 調(diào)用接口方法
    }
}
  1. 靜態(tài)內(nèi)部類(lèi):靜態(tài)內(nèi)部類(lèi)是在一個(gè)類(lèi)的內(nèi)部定義的靜態(tài)類(lèi)。它與外部類(lèi)的實(shí)例無(wú)關(guān),可以直接訪問(wèn)外部類(lèi)的靜態(tài)成員。
class OuterClass {
    // 外部類(lèi)的靜態(tài)成員變量和方法
    
    static class StaticInnerClass {
        // 靜態(tài)內(nèi)部類(lèi)的成員變量和方法
    }
    
    public static void main(String[] args) {
        StaticInnerClass inner = new StaticInnerClass(); // 創(chuàng)建靜態(tài)內(nèi)部類(lèi)的對(duì)象
    }
}

0