Почему внутренний класс может переопределять закрытый финальный метод?

Мне было интересно, имеет ли смысл также объявить закрытый метод как final, и я подумал, что это не имеет смысла. Но я вообразил, что есть исключительная ситуация, и написал код, чтобы понять это:

public class Boom {

    private void touchMe() {
        System.out.println("super::I am not overridable!");
    }

    private class Inner extends Boom {

        private void touchMe() {
            super.touchMe();
            System.out.println("sub::You suck! I overrided you!");
        }
    }

    public static void main(String... args) {
        Boom boom = new Boom();
        Boom.Inner inner = boom.new Inner();
        inner.touchMe();
    }
}

Это скомпилировано и работает. «Я должен сделать touchMe () финальным», - подумал я и сделал это:

public class Boom {

    private final void touchMe() {
        System.out.println("super::I am not overridable!");
    }

    private class Inner extends Boom {

        private void touchMe() {
            super.touchMe();
            System.out.println("sub::You suck! I overrided you!");
        }
    }

    public static void main(String... args) {
        Boom boom = new Boom();
        Boom.Inner inner = boom.new Inner();
        inner.touchMe();
    }
}

и это тоже работает и говорит мне

[email protected]:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!

почему?

66 голосов | спросил chicout 2 MaramFri, 02 Mar 2012 01:02:01 +04002012-03-02T01:02:01+04:0001 2012, 01:02:01

0 ответов


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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132