двоеточие после имени класса в java, что для [дубликата]

У меня есть вопрос о двоеточии в java-коде, в следующем фрагменте кода строка OuterClass:showMsg(text); и строка OuterClass:InnerClass:showMsg(text); не дают ошибок и заставляют меня думать, что символ двоеточия работает как двойное двоеточие в C++ (разрешение области), но вывод после запуска оставьте меня с вопросом, для чего двоеточие?

public class OuterClass {

    public void showMsg(String msg) {
        System.out.format("OuterShow : %s%n", msg);
    }

    public static abstract class InnerClass {        
        public abstract void command();
        public void showMsg(String msg) {
            System.out.format("InnerShow : %s%n", msg);
        }
    }

    public void someAction(){
        new InnerClass() {
            @Override
            public void command() {
                String text = "some text here";
                this.showMsg(text);
                OuterClass.this.showMsg(text);
                InnerClass:showMsg(text);
                OuterClass:showMsg(text);
                OuterClass:InnerClass:showMsg(text);
            }
        }.command();
    }

    public static void main(String[] args) {
        new OuterClass().someAction();
    }
}

Выход:

    --- exec-maven ---
    InnerShow : some text here
    OuterShow : some text here
    InnerShow : some text here
    InnerShow : some text here
    InnerShow : some text here

проверено на Windows 7 с jdk1.8.0_25 и maven-3.2.3


person Dorian    schedule 22.01.2016    source источник
comment
Этот вопрос относится к выпадающему ярлыку в этом посте.   -  person OneCricketeer    schedule 22.01.2016


Ответы (1)


Идентификатор, за которым следует одно двоеточие, — это просто метка. У вас нет помеченных операторов break, поэтому они бесполезны и семантически ничего не значат для вашей программы.

Эти 3 оператора с двоеточием эквивалентны только showMsg(text), поэтому каждый раз отображается InnerShow.

person rgettman    schedule 22.01.2016