首页 >Java >java教程 >Java 中的匿名类

Java 中的匿名类

DDD
DDD原创
2025-01-20 22:33:15528浏览

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