程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> java中關於內部類的使用詳解

java中關於內部類的使用詳解

編輯:JAVA編程入門知識

內部類訪問規則

•內部類可以直接訪問外部類中的成員,包括私有。訪問格式:外部類名.this
•外部類要訪問內部類必須創建內部類對象。
•內部類在成員位置上,可以被成員修飾符修飾。
代碼如下:

public class InnerClassDemo1 {
     public static void main(String[] args){
         Outer ou =new Outer();
         ou.method();// 4  3
         Outer.Inner oi =new Outer().new Inner();
         oi.function2();

     }

 }
 class Outer{
     private int x=3;
     class Inner{
         int x=4;
         void function1(){
             System.out.println(x);
             System.out.println(Outer.this.x);
         }
         void function2(){
             Outer.this.method();
         }
     }
     public void method(){
         Inner in =new Inner();
         in.function1();
     }
 }

靜態內部類

•內部類定義了靜態成員,內部類必須是靜態的。
代碼如下:

/*
 注意:內部類定義了靜態成員,內部類必須是靜態的。

 */
 class InnerClassDemo2
 {
     public static void main(String[] args)
     {
         new Outer.Inner().function();//創建靜態內部類對象
     }
 }
 class Outer
 {
     private static int x=5;
     static class Inner//靜態內部類 只能訪問外部類的靜態成員
     {
         void function()
         {
             System.out.println("inner:"+x);
         }
     }
 }

局部內部類

•內部類定義在局部時,可以直接訪問外部類中的成員。
•訪問局部變量必須被final修飾。
代碼如下:

/*
 內部類定義在局部時:可以直接訪問外部類中的成員,因為還持有外類中的引用。
 但是不可以訪問它所在的局部中的變量,只能訪問被final修飾的局部變量

 */

 class  InnerClassDemo3
 {
     public static void main(String[] args)
     {
         Outer out =new Outer();
         out.method(7);
     }
 }
 class Outer
 {
     int x=3;
     public void method(final int a)
     {
         class Inner
         {
             void function()
             {
                 System.out.println(a);
             }
         }
         new Inner().function();
     }
 }

匿名內部類

•匿名內部類是內部類的簡寫格式。
•匿名內部類的前提:內部類必須繼承一個類或者實現接口。
•匿名內部類不能創建構造函數。
代碼如下:

/*
 匿名內部類
 1.匿名內部類其實就是內部類的簡寫格式
 2.定義匿名內部列的前提。
   內部類必須是繼承一個類或者實現接口
 3.匿名內部類的格式:new 父類或者接口(){定義子類內容}
 */
 class InnerClassDemo4
 {
     public static void main(String[] args)
     {
         Demo d=new Demo()
         {
             void show()
             {
                 System.out.println("匿名內部類show方法");
             }
             void method()
             {
                 System.out.println("匿名內部類method方法");
             }
         }.show();
         d.method();
     }
 }
 abstract class Demo
 {
     abstract void show();
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved