Home  >  Article  >  Java  >  Summary of anonymous inner classes in java

Summary of anonymous inner classes in java

高洛峰
高洛峰Original
2016-12-15 12:19:291508browse

Anonymous inner classes are inner classes without names

Because they have no names, anonymous inner classes can only be used once. They are usually used to simplify code writing

But there is a prerequisite for using anonymous inner classes: you must inherit one Parent class or implement an interface

Example 1: Do not use anonymous inner classes to implement abstract methods

abstract class Person {
    public abstract void eat();
}
 
class Child extends Person {
    public void eat() {
        System.out.println("eat something");
    }
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Child();
        p.eat();
    }
}

Running results: eat something

As you can see, we use Child to inherit the Person class, and then implement a Child instance, upcast it to a reference to the Person class

However, if the Child class here is only used once, wouldn't it be troublesome to write it as an independent class?

Anonymous inner classes are introduced at this time

Example 2: Basic implementation of anonymous inner classes

abstract class Person {
    public abstract void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}

Run result: eat something

As you can see, we directly put the methods in the abstract class Person in curly brackets Implemented

This way you can omit the writing of a class

Moreover, anonymous inner classes can also be used on interfaces

Example 3: Using anonymous inner classes on interfaces

interface Person {
    public void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}

Run results: eat something

By As can be seen from the above example, as long as a class is abstract or an interface, then the methods in its subclasses can be implemented using anonymous inner classes

The most common situation is in multi-threaded implementation, because it needs to be implemented Multi-threading must inherit the Thread class or inherit the Runnable interface

Example 4: Anonymous inner class implementation of the Thread class

public class Demo {
    public static void main(String[] args) {
        Thread t = new Thread() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        t.start();
    }
}

Running results: 1 2 3 4 5

Example 5: Anonymous inner class implementation of the Runnable interface

public class Demo {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}

Running results: 1 2 3 4 5

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn