익명 클래스는 이름이 지정되지 않은 클래스로, 추가 파일 없이 내부 클래스 또는 인터페이스 구현을 정의하고 인스턴스화하는 데 이상적입니다. 일회용 특성상 재사용이 불가능합니다. 로컬 클래스(선언)와 달리 익명 클래스는 변수에 할당할 수 있는 단일 객체를 생성하는 표현식입니다.
인터페이스나 추상 클래스의 특정 메서드를 정의할 때와 같이 클래스가 한 번만 사용될 때 특히 유용합니다. Java Swing에서는 event listeners
또는 람다 함수(화살표 함수)
흥미로운 사실은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!