首頁 >Java >java教程 >Java 中的匿名類

Java 中的匿名類

DDD
DDD原創
2025-01-20 22:33:15497瀏覽

Clases anónimas en Java

Java 中的

匿名類是未命名的類,非常適合就地定義和實例化類或介面的實現,而不需要額外的文件。 其一次性使用性質阻礙了其重複使用。與本地類別(宣告)不同,匿名類別是產生單一物件的表達式,可指派給變數。

當一個類別只使用一次時,例如在定義介面或抽象類別的特定方法時,它們特別有用。 它在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn