匿名類是未命名的類,非常適合就地定義和實例化類或介面的實現,而不需要額外的文件。 其一次性使用性質阻礙了其重複使用。與本地類別(宣告)不同,匿名類別是產生單一物件的表達式,可指派給變數。
當一個類別只使用一次時,例如在定義介面或抽象類別的特定方法時,它們特別有用。 它在 Java Swing 中的應用很頻繁,有 event listeners
或 lambda 函數(箭頭函數)。
一個奇怪的事實是,Java 編譯器為它們分配一個自動名稱(例如 ClaseContenedora.class
),由包含類別的名稱和指示其位置的數字組成。
文法:
作為一個表達式,其語法類似於建構函數的調用,但它包含定義類別結構的程式碼區塊:
<code class="language-java">ClaseOInterfaz nombreVariable = new ClaseOInterfaz() { // Cuerpo de la clase anónima };</code>
關鍵組件是:
new
。 匿名類別的類型:
範例:
1。延長一堂課:
<code class="language-java">public class Carro { public void tipoMotor() { System.out.println("Motor de combustión interna"); } } public class Main { public static void main(String[] args) { Carro carroCombustion = new Carro(); Carro carroElectrico = new Carro() { @Override public void tipoMotor() { System.out.println("Motor eléctrico"); } }; carroCombustion.tipoMotor(); // Motor de combustión interna carroElectrico.tipoMotor(); // Motor eléctrico } }</code>
2。抽象類別的擴充:
<code class="language-java">public abstract class ConexionBD { public abstract void obtenerConexion(); } public class Main { public static void main(String[] args) { ConexionBD conexionMySQL = new ConexionBD() { @Override public void obtenerConexion() { System.out.println("Conexión a MySQL"); } }; ConexionBD conexionPostgreSQL = new ConexionBD() { @Override public void obtenerConexion() { System.out.println("Conexión a PostgreSQL"); } }; conexionMySQL.obtenerConexion(); // Conexión a MySQL conexionPostgreSQL.obtenerConexion(); // Conexión a PostgreSQL } }</code>
3。介面的實作:
<code class="language-java">import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> numeros = Arrays.asList(5, 10, 56, 3, 2, 1, 0); numeros.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); System.out.println(numeros); // [56, 10, 5, 3, 2, 1, 0] } }</code>
4。方法的參數:
<code class="language-java">public class Main { public static void main(String[] args) { Thread hilo = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println("Hola, soy un hilo"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); hilo.start(); } }</code>
優點:
範圍:
與普通類別類似,可以存取容器作用域的局部變量,但有不能聲明靜態初始化器或介面的限制,以及存取非最終或有效最終局部變數的限制。
結論:
匿名類別是 Java 中一個強大且多功能的工具,對於獨特而簡潔的實作非常有用。 它的使用雖然有時是隱式的,但可以簡化程式碼並提高效率。 更多資訊請參閱 Java 官方文件。
以上是Java 中的匿名類的詳細內容。更多資訊請關注PHP中文網其他相關文章!