Calling newly defined method from anonymous class

user1544745 picture user1544745 · Mar 20, 2013 · Viewed 10.3k times · Source

I instantiated an object of an anonymous class to which I added a new method.

Date date = new Date() {
    public void someMethod() {}
}

I am wondering if it is possible to call this method from outside somehow similar to:

date.someMethod();

Answer

AmitG picture AmitG · Mar 20, 2013

Good question. Answer is No. You cannot directly call date.someMethod();
Let's understand first what is this.

Date date = new Date()  { ... }; 

Above is anonymous(have no name) sub-class which is extending Date class.

When you see the code like,

    Runnable r = new Runnable() {

        public void run() {

        }

    };

It means you have defined anonymous(have no name) class which is implementing(not extending) Runnable interface.

So when you call date.someMethod() it won't be able to call because someMethod is not defined in superclass. In above case superclass is Date class. It follows simple overriding rules.

But still if you want to call someMethod then following is the step.

Fisrt way>
With reference variable 'date'
date.getClass().getMethod("someMethod").invoke(date);

Second way>
With newly created anonymous sub-class of Date class's object.

new Date() 
{
    public void someMethod() {
          System.out.println("Hello");
    }
}.someMethod();   //this should be without reference 'date'