> Java > java지도 시간 > Java의 익명 클래스

Java의 익명 클래스

DDD
풀어 주다: 2025-01-20 22:33:15
원래의
491명이 탐색했습니다.

Clases anónimas en Java

Java의

익명 클래스는 이름이 지정되지 않은 클래스로, 추가 파일 없이 내부 클래스 또는 인터페이스 구현을 정의하고 인스턴스화하는 데 이상적입니다. 일회용 특성상 재사용이 불가능합니다. 로컬 클래스(선언)와 달리 익명 클래스는 변수에 할당할 수 있는 단일 객체를 생성하는 표현식입니다.

인터페이스나 추상 클래스의 특정 메서드를 정의할 때와 같이 클래스가 한 번만 사용될 때 특히 유용합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿