在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)。
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ì)象
}
}
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)的方法
}
}
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)用接口方法
}
}
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ì)象
}
}