2013-09-30 4 views
-3

первый пример возможен, но пример 2 невозможен и приводит к сообщению об ошибке «незаконный запуск выражения» из компилятора. почему невозможно определить метод внутри метода run()?Почему не удается определить метод внутри метода run() потока

пример 1

public class TextUpdater implements Runnable { 

    public void inter(){ 

    } 

    @Override 
    public void run() { 

     inter(); 

    } 

    } 
} 

пример 2, не представляется возможным

public class TextUpdater implements Runnable { 

    @Override 
    public void run() { 

     public void inter(){ // results in error 

     } 

    } 
} 
+2

Это не компилируется по причине: это незаконно. – Fildor

+0

Это может быть совершенно законным на других языках, но не на Java. – mavrosxristoforos

+1

Умм ... это немного похоже на вопрос, почему у велосипеда нет крыльев. –

ответ

1

Если вы действительно объявляете метод в рамках метода, он всегда будет приводить к ошибке. Java строго объектно-ориентирована и требует, чтобы методы принадлежали классу. Другими словами, вы должны объявить свои методы в классе. JavaScript, Python и другие объектно-ориентированные языки ослабляют это строгое правило, но Java нет. Прочитано this thread on stackoverflow. Это почти та же тема.

4

Java не позволяет определить метод внутри метода. Он даже не имеет семантических правил для того, что бы это сделало. Что вы ожидаете от примера 2?

Это ясно, какой пример 1 делает. Вы создаете метод с именем inter с пустым телом. Затем, в run, вы называете это.

Но что делать 2? Вы создаете метод inter внутри run. Так что это будет? Когда вы назовете это?

+2

+1 для вопросов, на самом деле это ответы :) –

+0

это является хорошим ответом на пути классической философии – Kevik

0

Невозможно создать метод внутри другого метода.

0

run() метод, вы просто не можете определить новые методы внутри метода. Методы определяют в классе не внутри методов

Смежные вопросы