Java – inline class definition
I've seen several similar examples in Java, and I hope someone can explain what happened It seems strange to me that a new class can be defined inline Expect the first printout line because it's just toString But the second one seems to override the function internally Is there a technical term? Or any more in-depth documents? thank you!
If I have the following code:
public class Apple { public String toString() { return "original apple"; } } public class Driver { public static void main(String[] args) { System.out.println("first: " + new Apple()); System.out.println("second: " + new Apple() { public String toString() { return "modified apple"; } } ); } }
Code output:
first: original apple second: modified apple
Solution
This is an anonymous inner class You can find more information about inner classes in the Java documentation link Editor: I added a better link to describe anonymous inner classes, because the Java document left something needed/ edit
Most people will use anonymous inner classes to define listeners Consider this:
I have a button. When I click it, I want it to show something to the console But I don't want to create a new class in a different file. I don't want to define an internal class in this file later. I want to use logic here immediately
class Example { Button button = new SomeButton(); public void example() { button.setOnClickListener(new OnClickListener() { public void onClick(SomeClickEvent clickEvent) { System.out.println("A click happened at " + clickEvent.getClickTime()); } }); } interface OnClickListener { void onClick(SomeClickEvent clickEvent); } interface Button { void setOnClickListener(OnClickListener ocl); } }
This example is weird and obviously incomplete, but I think it's an idea