java內部類種類及其特色

定義

內部類是指在一個外部類的內部再定義一個類。編譯成功,就會成爲徹底不一樣的兩類。微信

內部類有四種狀況

  • 成員內部類:成員內部類,就是做爲外部類的成員,能夠直接使用外部類的全部成員和方法,即便是private的。同時外部類要訪問內部類的全部成員變量/方法,則須要經過內部類的對象來獲取。實例化方式:new Out().new In();
  • 局部內部類:是指內部類定義在方法和做用域內。
  • 靜態內部類:其實它和成員內部類很類似,只是只能訪問外部類的靜態成員變量,具備侷限性。實例化方式:new Out.In();其實你會發現就是把內部類當作一個屬性來對待。
  • 匿名內部類:匿名內部類不能加訪問修飾符。其實咱們最多見的執行一個線程就是用的內部類的方式。
    new Thread(){
    			@Override
    			public void run(){
    				System.out.println(name);
    			}
    		}.start();

例子ide

成員內部類this

package innerclass;

public class innerOut {
	private int num = 12;
   
   class innerIn {
       private int num = 13;
       public void print() {
           int num = 14;
           System.out.println("局部變量:" + num);
           System.out.println("內部類變量:" + this.num);
           System.out.println("外部類變量:" + innerOut.this.num);
       }
   }
}

靜態內部類線程

package innerclass;

public class Out {
	private static int age = 12;
    
    static class In {
        public void print() {
            System.out.println(age);
        }
    }
}

匿名內部類code

package innerclass;

public class anonymityClass {
	//注意是final類型的
	public void startThread(final String name){
		new Thread(){
			@Override
			public void run(){
				System.out.println(name);
			}
		}.start();
	}
}

局部內部類對象

package innerclass;

public class methodInnerClass {
	private int num = 12;
	 
    public void Print(final int x) {
        class In {
            public void inPrint() {
                System.out.println(x);
                System.out.println(num);
            }
        }
        new In().inPrint();
    }
}

內部類的特色總結

在方法間定義的非靜態內部類:作用域

  • 外圍類和內部類可互相訪問本身的私有成員。
  • 內部類中不能定義靜態成員變量。

在方法間定義的靜態內部類:it

  • 只能訪問外部類的靜態成員。

在方法中定義的局部內部類:編譯

  • 該內部類沒有任何的訪問控制權限
  • 外圍類看不見方法中的局部內部類的,可是局部內部類能夠訪問外圍類的任何成員。
  • 方法體中能夠訪問局部內部類,可是訪問語句必須在定義局部內部類以後。
  • 局部內部類只能訪問方法體中的常量,即用final修飾的成員。

在方法中定義的匿名內部類:class

  • 沒有構造器,它是將構造器參數傳遞給超類構造器。

既然瞭解了內部類,你們能夠想一想,咱們平時到底哪些用到了內部類,請留言到評論區哦,歡迎你們討論!!


歡迎關注個人微信公衆號cobs-snail,讓咱們一塊兒前進吧!!

前進吧蝸牛

相關文章
相關標籤/搜索