Во что компилируются анонимные внутренние классы?​

Анонимные внутренние классы компилируются в файлы внешнийКласс$n.class. На месте внешнего класса, соответственно, название обрамляющего класса, внутри которого описывается анонимный внутренний класс. На месте n число от 1 до количества анонимных классов. Всё станет понятно когда Вы скомпилируете код и проследите за компиляцией файлов в директории проекта. ​

public class TestAnonym {
    private static Runnable anon;
    private static Runnable anon2;
    private static Runnable anon3;
    public static void main(String[] args) {
         anon = new Runnable() {
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        anon2 = new Runnable() {
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        anon3 = new Runnable() {
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        System.out.println(anon.getClass().getName());
        TestAnonym.InnClass inn = new TestAnonym().new InnClass();
        System.out.println(inn.r.getClass().getName());
        InnStaticClass isc = new InnStaticClass();
        System.out.println(isc.r.getClass().getName());
    }

    class InnClass{
        public Runnable r = new Runnable() {
            public void run() {
                System.out.println("Hello from InnClass");
            }
        };
    }

    static class InnStaticClass{
        public Runnable r = new Runnable() {
            public void run() {
                System.out.println("Hello from InnStaticClass");
            }
        };
    }
}

Вывод:
TestAnonym$1
TestAnonym$InnClass$1
TestAnonym$InnStaticClass$1

 

Понравилась статья? Поделиться с друзьями:

Комментарии:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: