前言:
內(nèi)部類(lèi)是類(lèi)的五大成員。一個(gè)類(lèi)的其他的成員分別是屬性,方法,構(gòu)造方法,代碼塊。本文將詳細(xì)介紹什么是內(nèi)部類(lèi),以及內(nèi)部類(lèi)的意義。
內(nèi)部類(lèi):
內(nèi)部類(lèi)(Inner Class)是 Java 中的一個(gè)特殊概念,它指的是一個(gè)類(lèi)定義在另一個(gè)類(lèi)內(nèi)部的類(lèi)。內(nèi)部類(lèi)可以訪(fǎng)問(wèn)外部類(lèi)的成員,包括私有的成員和方法。內(nèi)部類(lèi)還可以訪(fǎng)問(wèn)同一個(gè)外部類(lèi)中其他內(nèi)部類(lèi)的成員。內(nèi)部類(lèi)是 Java 實(shí)現(xiàn)面向?qū)ο蟮囊粋€(gè)重要機(jī)制,常用于事件驅(qū)動(dòng)編程中。
Java 中內(nèi)部類(lèi)的分類(lèi)有以下幾種:
1. 成員內(nèi)部類(lèi):定義在外部類(lèi)中,但是在外部類(lèi)的成員方法之外。
2. 靜態(tài)內(nèi)部類(lèi):定義在外部類(lèi)中,但是在外部類(lèi)的靜態(tài)方法中或者外部類(lèi)的靜態(tài)區(qū)域中。
3. 局部?jī)?nèi)部類(lèi):定義在外部類(lèi)的方法體中或者一個(gè)作用域內(nèi)。
下面是一個(gè)成員內(nèi)部類(lèi)的示例:
public class Outer {
? ? private int num = 1;
? ? private String name = "Outer";
? ? public class Inner {
? ? ? ? public void print() {
? ? ? ? ? ? System.out.println("num is " + num + ", name is " + name);
? ? ? ? }
? ? }
}
在以上代碼中,定義了外部類(lèi) `Outer` 和成員內(nèi)部類(lèi) `Inner`,`Inner` 類(lèi)可以訪(fǎng)問(wèn) `Outer` 類(lèi)中的私有成員 `num` 和 `name`。
下面是一個(gè)示例程序,演示如何創(chuàng)建和使用成員內(nèi)部類(lèi):
public class Test {
? ? public static void main(String[] args) {
? ? ? ? Outer outer = new Outer();
? ? ? ? Outer.Inner inner = outer.new Inner();
? ? ? ? inner.print();
? ? }
}
在以上示例中,首先創(chuàng)建了外部類(lèi) `Outer` 的實(shí)例 `outer`,然后使用實(shí)例 `outer` 創(chuàng)建了內(nèi)部類(lèi) `Inner` 的實(shí)例 `inner`,最后調(diào)用 `inner` 的方法 `print()` 輸出結(jié)果。
總之,內(nèi)部類(lèi)是 Java 實(shí)現(xiàn)面向?qū)ο缶幊痰闹匾獧C(jī)制,可以訪(fǎng)問(wèn)外部類(lèi)的成員和方法,是實(shí)現(xiàn)一些事件驅(qū)動(dòng)或者復(fù)雜邏輯的必要手段之一。
內(nèi)部類(lèi)的分類(lèi):
1.成員內(nèi)部類(lèi):
成員內(nèi)部類(lèi)是和外部類(lèi)的成員變量和方法平級(jí)的,可以訪(fǎng)問(wèn)外部類(lèi)的所有變量和方法,它的定義方式如下:
public class Outer {
? ? private int data;
? ? public void method() {
? ? ? ? Inner inner = new Inner();
? ? ? ? inner.print();
? ? }
? ? class Inner {
? ? ? ? public void print() {
? ? ? ? ? ? System.out.println(data);
? ? ? ? }
? ? }
}
上面的代碼定義了一個(gè) Outer 類(lèi)和一個(gè) Inner(Nested) 類(lèi),在 Outer 類(lèi)中定義了一個(gè)成員內(nèi)部類(lèi) Inner,它可以訪(fǎng)問(wèn) Outer 類(lèi)中的 data 變量。
使用成員內(nèi)部類(lèi)的方式如下:
Outer outer = new Outer();
outer.method(); // 輸出 "0"
2. 靜態(tài)內(nèi)部類(lèi)
靜態(tài)內(nèi)部類(lèi)是在外部類(lèi)內(nèi)部定義的一個(gè)靜態(tài)類(lèi),它獨(dú)立于外部類(lèi)的對(duì)象,也就是說(shuō),即使沒(méi)有創(chuàng)建外部類(lèi)的對(duì)象,我們?nèi)匀豢梢允褂渺o態(tài)內(nèi)部類(lèi),靜態(tài)內(nèi)部類(lèi)的定義方式如下:
public class Outer {
? ? private static int data;
? ? public static class Inner {
? ? ? ? public void print() {
? ? ? ? ? ? System.out.println(data);
? ? ? ? }
? ? }
}
使用靜態(tài)內(nèi)部類(lèi)的方式如下:
Outer.Inner inner = new Outer.Inner();
inner.print(); // 輸出 "0"
這里需要注意,靜態(tài)內(nèi)部類(lèi)中只能訪(fǎng)問(wèn)外部類(lèi)的靜態(tài)變量或靜態(tài)方法。
3. 局部?jī)?nèi)部類(lèi)
局部?jī)?nèi)部類(lèi)是定義在方法內(nèi)部的內(nèi)部類(lèi),只能在該方法內(nèi)部使用,它的定義方式如下:
public class Outer {
? ? private int data;
? ? public void method() {
? ? ? ? class Inner {
? ? ? ? ? ? public void print() {
? ? ? ? ? ? ? ? System.out.println(data);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? Inner inner = new Inner();
? ? ? ? inner.print();
? ? }
}
上面的代碼定義了一個(gè)局部?jī)?nèi)部類(lèi) Inner,它可以訪(fǎng)問(wèn)外部類(lèi)中的 data 變量。
使用局部?jī)?nèi)部類(lèi)的方式如下:
Outer outer = new Outer();
outer.method(); // 輸出 "0"
4. 匿名內(nèi)部類(lèi)
匿名內(nèi)部類(lèi)是沒(méi)有名字的內(nèi)部類(lèi),只能一次性使用,它通常用于實(shí)現(xiàn)接口和抽象類(lèi)的方法,它的定義方式如下:
public interface MyInterface {
? ? void method();
}
public class MyClass {
? ? public void print() {
? ? ? ? MyInterface myInterface = new MyInterface() {
? ? ? ? ? ? public void method() {
? ? ? ? ? ? ? ? System.out.println("Hello World");
? ? ? ? ? ? }
? ? ? ? };
? ? ? ? myInterface.method();
? ? }
}
上面的代碼中,MyInterface 是一個(gè)接口,MyClass 中 print() 方法中使用了匿名內(nèi)部類(lèi)實(shí)現(xiàn)了 MyInterface 的 method() 方法。
使用匿名內(nèi)部類(lèi)的方式如下:
MyClass myClass = new MyClass();
myClass.print(); // 輸出 "Hello World"
以上是幾種常見(jiàn)的內(nèi)部類(lèi)的定義和使用方式,內(nèi)部類(lèi)的使用非常靈活,可以通過(guò)內(nèi)部類(lèi)實(shí)現(xiàn)許多功能,并且它具有訪(fǎng)問(wèn)外部類(lèi)私有成員的能力,但是由于內(nèi)部類(lèi)的存在,代碼的可讀性和可維護(hù)性會(huì)相應(yīng)降低,因此應(yīng)該謹(jǐn)慎使用。
總結(jié):
內(nèi)部類(lèi)的出現(xiàn)進(jìn)一步擴(kuò)展了類(lèi)的功能,使得類(lèi)的功能更加豐富,內(nèi)部類(lèi)的種類(lèi)繁多,但我們對(duì)于這一塊只要求掌握就可以了,不必做過(guò)深的研究。
如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-616767.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-616767.html
到了這里,關(guān)于【從零開(kāi)始學(xué)習(xí)JAVA | 第十九篇】初識(shí)內(nèi)部類(lèi)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!