una que programacion objetos objeto metodos instanciar ejemplos declara crear como clases clase atributos atributo java object methods anonymous-class anonymous-inner-class

que - objetos en java



Declarar un método al crear un objeto (4)

¿Por qué la primera forma es correcta, pero la segunda no?

Primera forma:

new Object() { public void a() { /*code*/ } }.a();

Segunda forma:

Object object = new Object() { public void a() { /*code*/ } }; object.a();

¿Y dónde puedo encontrar más información al respecto?


En la segunda opción, asigna su nuevo objeto a una referencia de tipo Object . Debido a esto, solo los métodos definidos en java.lang.Object podrían llamarse en esa referencia.

Y en la primera opción, básicamente creas un nuevo objeto de clase anónima que extiende java.lang.Object . Esa clase anónima tiene el método adicional a() , por lo que puede llamarlo.


Java se escribe estáticamente. Cuando dices object.a() está buscando el método a en la clase Object que no está presente. De ahí que no se compile.

Lo que puedes hacer es obtener el método del object utilizando la reflexión como se muestra a continuación:

Object object = new Object() { public void a() { System.out.println("In a"); } } Method method = object.getClass().getDeclaredMethod("a"); method.invoke(object, null);

Esto imprimiría

en un


No se preocupe, tendrá que hacer un poco de corrección. Ambas son formas de acceder al miembro privado de una clase. Al utilizar la primera forma, no tiene que declarar previamente el método .ex: -

public class demo { public static void main(String[] args) { new Object() { public void a() { /*code*/ System.out.println("Hello"); } }.a(); } }

Pero al utilizar la segunda forma, tendrá que declarar explícitamente el método a (); Ya sea en la clase abstracta o en la interfaz, puede anularlo. me gusta: -

interface Object { public void a(); } class demo { public static void main(String[] args) { Object object = new Object() { public void a() { System.out.println("Hello"); } }; object.a(); } }

Espero que te ayude un poco.