Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is this technique called in Java?

I'm a C++ programmer, and I was reading this site when I came across the example below. What is this technique called in Java? How is it useful?

class Application {
...
  public void run() {
    View v = createView();
    v.display();
...
  protected View createView() {
    return new View();
  }
...
}    

class ApplicationTest extends TestCase {

  MockView mockView = new MockView();

  public void testApplication {
    Application a = new Application() {    <---
      protected View createView() {        <---
        return mockView;                   <--- whao, what is this?
      }                                    <---
    };                                     <---
    a.run();
    mockView.validate();
  }

  private class MockView extends View
  {
    boolean isDisplayed = false;

    public void display() {
      isDisplayed = true;
    }

    public void validate() {
      assertTrue(isDisplayed);
    }
  }
}
like image 497
sivabudh Avatar asked Nov 28 '22 19:11

sivabudh


1 Answers

The general concept being used there is Anonymous Classes

What you have effectively done is to create a new sub-class of Application, overriding (or implementing) a method in sub-class. Since the sub-class is unnamed (anonymous) you cannot create any further instances of that class.

You can use this same technique to implement an interface, or to instantiate an abstract class, as long as you implement all necessary methods in your definition.

like image 53
David Sykes Avatar answered Dec 05 '22 02:12

David Sykes