匿名类是未命名的类,非常适合就地定义和实例化类或接口的实现,而不需要额外的文件。 其一次性使用性质阻碍了其重复使用。与本地类(声明)不同,匿名类是生成单个对象的表达式,可分配给变量。
当一个类仅使用一次时,例如在定义接口或抽象类的特定方法时,它们特别有用。 它在 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中文网其他相关文章!