Anonymous Classes

Created By: Geoffrey Challen
/ Updated: 2021-10-07

This lesson ventures into interesting uncharted territory. Until now, our classes have needed to have names. But, Java doesn't actually require this! Let's explore anonymous classes and their uses...

Please note that the next two lessons are on fairly advanced topics. You will see and need to understand code that uses these ideas, but testing on them will be limited.

Anonymous Classes

We've seen how to define what is called a named class. This should be familiar to us by now:

However, Java also allows us to define so-called anonymous classes. Let's go through an example carefully:

Walk through the syntax of the anonymous class.

In contrast to named classes, anonymous classes:

  • Do not have a name
  • Must extend another class or implement an interface
  • Are created immediately, since they have no name and couldn't be named later
  • Cannot provide a constructor

Capturing Variables

Anonymous classes can capture the value of variables that are available when they are created. This can be extremely useful. However, there are limitations to this approach. Most importantly, the variables that are captured must either be final or effectively final.

Let's look at an example:

Explain variable capture. Show limitations regarding updates.

Uses for Anonymous Classes

We can create anonymous classes in Java. Cool! But... so what!? What problems can these classes solve?

Surprisingly, anonymous classes turn out to be common and quite powerful. Let's look at an example.

Imagine that we want to count the number of elements in an int array that meet some condition. The condition could be that the element was positive, or negative, or odd, or even, or divisible by three, or whatever.

One approach would be to write separate methods for each thing we would want to count:

Wow, this is getting tedious—and we've only done three! Imagine if we had a bunch of different conditions we needed to handle... But they are all very similar. There must be a better way.

Let's see how to rewrite the code above using an anonymous class in a way that makes the counting logic completely flexible.

Rewrite the example to use anonymous classes. Define the appropriate interface and use it in a general counting function.

Show how to complete the homework problem above. Feel free to cover multiple approaches!

Solution Walkthrough

Show how to complete the homework problem above. Feel free to cover multiple approaches!

Solution Walkthrough