Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

259
Views
¿Esta implementación se llamaría clase anónima?

He visto esto muchas veces, pero estoy un poco confundido si esto se llamaría o no una clase anónima.

 public class Test { public static void main(String[] args) { new Thread(){ @Override public void run() { System.out.println("##"); } }.start(); } }

La razón por la que estoy confundido es porque las clases anónimas no tienen nombre, pero claramente ya tenemos una clase "Subproceso" en la API de Java, lo que significa que tiene un nombre, y si tiene un nombre, ¿cómo puede ser anónimo? class, y si no es una clase anónima, entonces qué es.

Sé que es un poco tonto, pero no puedo razonar de manera determinista porque veo argumentos válidos en ambos lados.

Además, arriba puedo anular claramente el método de run de la clase Thread , ahora si creo mi propia clase, digamos MyClass , defino algunos métodos en ella y luego intento hacer lo mismo que arriba, entonces ¿por qué no puedo anular los métodos de MyClass ? forma en que pude anular el método de run de la clase Thread .

 public class MyClass { private void myMethod1() { } private void myMethod2() { } } public class Test { public static void main(String[] args) { new MyClass(){ // why I cannot override "myMethod1" and "myMethod1" of `MyClass`, they way I was able to override `run` method of `Thread` class }; } }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

  1. Sí, su primera clase es anónima ya que está en línea y se extiende desde Thread. No es lo mismo que su clase Thread.
  2. Con respecto a MyClass : por supuesto, no puede extender métodos privados. Esto no tiene nada que ver con clases anónimas y son reglas básicas de herencia de Java. Hágalos públicos y podrá extenderlos en línea.

Para aclarar, si tiene una clase anidada que tiene un nombre, puede declarar una variable de su tipo:

 public class Test { private static class MyThread extends Thread { @Override public void run() { System.out.println("Foo"); } } public static void main(String[] args) { MyThread myThread = new MyThread(); } }

Pero si tienes una clase anónima, no puedes hacer esto:

 public static void main(String[] args) { new Thread(){ @Override public void run() { System.out.println("##"); } }.start(); // how can you declare a variable of the above type *with* its behavior? }

Bit lateral: casi nunca debe extender Thread y, en su lugar, implementar Runnable, o incluso mejor, usar ejecutores para ayudarlo a hacer su subprocesamiento.


re:

Ok, gracias por su respuesta, corríjame según lo entiendo: al usar una clase anónima, puedo crear una clase nueva (básicamente, la implementación de una interfaz) en tiempo de ejecución, también puedo extender una clase existente y eso aún se llamaría "clase anónima "?

Sí , crea una clase nueva, pero no necesariamente implementa una interfaz. De hecho, su ejemplo anterior no tiene nada que ver directamente con las interfaces y todo que ver con la extensión de una clase concreta existente. Puede y, a menudo, crea clases anónimas que implementan interfaces, siendo Runnable un ejemplo común, pero su ejemplo anterior no es "básicamente la implementación de una interfaz".

over 4 years ago · Santiago Trujillo Report

0

Subproceso de clase pública extiende Objeto implementa Ejecutable

Básicamente, está creando una clase anónima de Class Thread , pero debido a que Thread Class implements Runnable (que es una interfaz funcional que tiene un método abstracto) -> tiene que @override run() método que proviene de Runnable Interface

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!