內部類別的介紹
定義在另外一個類別中的類,叫內部類別
成員內部類別
1..new 建立成員內部類別必須先建立外部類別的實例,然後透過.new 建立內部類別的物件
2..this 可以透過外部類別的類別名稱.this去存取外部類別的所有屬性和方法。
public class Test1 { String name = "asnd"; public static void main(String[] args) { Test1 test1 = new Test1(); Inner mInner = test1.new Inner(); mInner.print(); } void show() { System.out.println("show"); } public class Inner { String name = "123"; private void print(){ show(); System.out.println(name);//打印的是123 System.out.println(Test1.this.name);//打印的是asnd } } }
匿名內部類別
沒有名字的類別,創建類別的同時,也會建立一個物件。
只需要用到一次的類別,就可以使用匿名內部類別
File file = new File("D:/cc.txt") { @Override public boolean delete() { System.out.println("是否删除y/n"); Scanner input = new Scanner(System.in); String str = input.next(); if (str.equals("y")) { return super.delete(); } System.out.println("删除失败"); return false; } }; file.delete(); }
匿名物件
該物件只需要存取一次.
new Thread() { @Override public void run() { System.out.println("线程开始!"); try { Thread.sleep(2000); System.out.println("线程结束!"); } catch (Exception e) { e.printStackTrace(); } super.run(); } }.start();
靜態內部類別
1.的方法和變量,不能存取非靜態。
2.靜態內部類別可以不需要建立外部類別的引用,而直接建立。
匿名內部類別存取局部變數
內部類別存取局部變數必須final,如果沒有加,jdk1.8預設加上去了
當所使用的變數是在變的時候可以用下面的方法,也可以把下面的i在開始的時候定為靜態的
for (int i = 0; i < 5; i++) { final int finali = i; new Thread() { public void run() { System.out.println(finali); }; }.start(); }
下面介紹一下內部類的實現技巧
public static void main(String[] args) { Lam mLam = new Lam(); //第一种实现的方法 mLam.to(new Ligh() { @Override public void shin() { System.out.println("on的第一种方法"); } }); //第二种实现方法 class MyLam implements Ligh{ @Override public void shin() { System.out.println("第二种"); }} mLam.to(new MyLam()); } } interface Ligh { void shin(); } class Lam { public void to(Ligh ligh) { ligh.shin(); System.out.println("on"); } }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
更多java 內部類(匿名類,匿名對象,靜態內部類)詳解及實例相關文章請關注PHP中文網!