Почему у нас могут быть статические заключительные участники, но наклон имеет статический метод во внутреннем классе?

Почему у нас могут быть статические заключительные участники, но наклон имеет статический метод в не статическом внутреннем классе?

Действительно ли мы можем получить доступ к статическим заключительным членским переменным внутреннего класса вне внешнего класса, не инстанцируя внутреннего класса?

7
задан Ashish 11 June 2011 в 03:08
поделиться

1 ответ

ВЫ МОЖЕТЕ иметь статический метод в статическом «внутреннем» классе.

public class Outer {
    static String world() {
        return "world!";
    }
    static class Inner {
        static String helloWorld() {
            return "Hello " + Outer.world();
        }
    }   
    public static void main(String args[]) {
        System.out.println(Outer.Inner.helloWorld());
        // prints "Hello world!"
    }
}

Однако, чтобы быть точным, Внутренний называется вложенным классом в соответствии с терминологией JLS ( 8.1.3 ):

Внутренние классы могут наследовать статические члены, которые не компилируются. -временные константы, даже если они не могут их объявлять. Вложенные классы, которые не являются внутренними классами, могут свободно объявлять статические члены в соответствии с обычными правилами языка программирования Java.


Кроме того, НЕ в точности то, что внутренний класс может иметь static final членов; чтобы быть более точным, они также должны быть константами времени компиляции . Следующий пример иллюстрирует разницу:

public class InnerStaticFinal {
    class InnerWithConstant {
        static final int n = 0;
        // OKAY! Compile-time constant!
    }
    class InnerWithNotConstant {
        static final Integer n = 0;
        // DOESN'T COMPILE! Not a constant!
    }
}

Причина, по которой в этом контексте разрешены константы времени компиляции, очевидна: они встроены во время компиляции.

7
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: