一篇文章教會你使用Java內部類、成員內部類、靜態內部類和方法內部類
一、內部類
(一)什么是內部類?
可以在類中再定義類,就叫做內部類,這個內部類所在的類,就叫做外部類。
(二)內部類作用
1.內部類提供更好的封裝,把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
2.內部類成員可以直接訪問外部類的私有數據,因為內部類被當成外部類的成員。然而外部類不能訪問內部類的實現細節(如內部類的成員變量)。
二、成員內部類
1.什么是成員內部類
在一個類中可以定義成員變量、成員方法外,還可以定義類就叫做成員內部類。成員內部類可以訪問外部類的所有成員。
2.外部類訪問內部類,首先創建外部類對象去創建內部類對象,創建內部類對象的語法格式
外部類名.內部類名 變量名=new 外部類名{}.new 內部類名{}
3.怎么定義成員內部類案例
例如:
- class A{
- //定義類的成員變量
- private String name="張三";
- private int age=28;
- //定義一個成員方法,方法去訪問內部類
- public void test(){
- B b=new B();
- b.say();
- }
- //定義一個成員內部類
- class B{
- public void say(){
- //成員內部類方法訪問外部類的成員變量
- System.out.println("你好!我叫"+name+"今年"+age+"歲!");
- }
- }
- }
- public class p17 {
- public static void main(String[] args) {
- A a=new A();//創建外部類
- a.test();//調用test()方法
- }
- }
輸出的結果是:
- 你好!我叫張三今年28歲!
A是一個外部類,在這個類中定義了一個內部類B和test()成員方法,在B類中有一個say()方法是成員內部類去訪問外部類的成員變量name和age,在test()方法中創建內部類B實例對象,調用say()方法。如果想外部類去訪問內部類,首先創建外部類對象去創建內部類對象,創建內部類對象代碼如下:
- A.B a=new A().new B();//創建內部類
- a.say();//調用test()方法
三、靜態內部類
1.什么是靜態內部類
內部類如果使用static關鍵字來聲明,這個內部類叫做靜態內部類。它是可以在不創建外部類對象被實例化。
2.創建靜態內部類語法格式
- 外部類名.內部類名 變量名=new 外部類名.內部類名()
3.如何使用靜態內部案例
例如:
- class A{
- //定義類的成員變量
- private static String name="李華";
- private static int age=18;
- //定義靜態內部類
- static class B{
- void say(){
- System.out.println("你好!我叫"+name+"今年"+age+"歲!");
- }
- }
- }
- public class p18 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- A.B a=new A.B();//創建內部類
- a.say();//調用內部類的方法
- }
- }
輸出的結果是:
你好!我叫李華今年18歲!
從上面的代碼中,內部類B使用static關鍵字來聲明,表示一個靜態內部類。在靜態內部類中只可以訪問外部類的靜態變量。如果訪問外部類的成員變量必須通過外部類的實例去訪問,靜態內部不會有外部類的引用!
四、方法內部類
1.什么是方法內部類
內部類定義在外部類的方法中,方法內部類只可以在這個方法的內部可見,也就是只可以在這個方法內使用。
2.方法內部類不可以在外部類方法以外去使用,方法內部類不能使用訪問控制符和static修飾符。
3.怎么使用方法內部類
例如:
- class A{
- //定義類的成員變量
- private String name="李華";
- private int score=88;
- public void test(){
- //在方法中定義內部類
- class B{
- void show(){
- //訪問外部類的成員變量
- System.out.println("姓名:"+name+" "+"英語成績:"+score+"分!");
- }
- }
- B b=new B();//創建內部類對象
- b.show();//調用內部類方法
- }
- }
- public class p19 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- A a=new A();//創建外部類對象
- a.test();//調用test()方法
- }
- }
輸出的結果是:
- 姓名:李華 英語成績:88分!
從上面代碼中,在A類的test()方法中定義了一個內部類B,因為內部類B是方法內部類,程序在運行只能在方法創建類的實例對象然后調用show()方法,方法內部類是可以訪問外部類的成員變量。
五、總結
本文主要介紹了內部類的成員內部類、靜態內部類、方法內部類。
成員內部類是在一個類中可以定義成員變量、成員方法外,還可以定義類。通過一個怎么定義成員內部類案例幫助理解這個用法。
靜態內部類是使用static關鍵字來聲明,通過一個如何使用靜態內部類案例理解這個用法。
方法內部類是內部類定義在外部類的方法中,方法內部類只可以在這個方法的內部可見,也就是只可以在這個方法內使用。
希望大家通過本文的學習,對你有所幫助!
本文轉載自微信公眾號「 Java進階學習交流」,可以通過以下二維碼關注。轉載本文請聯系 Java進階學習交流公眾號。