java中匿名內部類總結,java匿名類總結
在java的世界裡,提供了匿名內部類文法糖,用於協助大家簡化代碼,本文簡要從介面,抽象類別以及常規類以代碼的形式描述其常用模式。
1. 介面模式
public interface IWriter { void write();}public static void main(String[] args) { IWriter writer = new IWriter() { @Override public void write() { System.out.println("IWriter write..."); } }; writer.write();}2.抽象類別
public abstract class AbstractWriter { public abstract void write();} public static void main(String[] args) { AbstractWriter abstractWriter = new AbstractWriter() { @Override public void write() { System.out.println("AbstractWriter write..."); } }; abstractWriter.write();}
3.常規類
public class TextWriter implements IWriter { @Override public void write() { System.out.print("text writer.."); }}public static void main(String[] args) { TextWriter textWriter = new TextWriter() { @Override public void write() { System.out.println("TextWriter 2 write..."); } }; textWriter.write();}4.線上程中使用
public static void main(String[] args) { Thread thread = new Thread() { @Override public void run() { new IWriter() { @Override public void write() { System.out.println("IWriter thread write..."); } }.write(); } }; thread.run();}
5.結語
綜上可以看出,其實不管是介面中,抽象類別,還是常規類派生出來的匿名內部類,其用法都是一樣的。之所以說這個是一個文法糖,其本質是編譯器在編譯的時候,將匿名內部類單獨編譯成不多個不同的class,這個和單獨寫實作類別後再調用其實本質是一樣,具體可以參見編譯後組建目錄.如下所示: