Почему статический локальный класс не разрешен в методе? [закрыто]
Я отряхиваю Java, и у меня есть некоторые недоразумения о локальных классах (которые я в конечном итоге никогда не использовал), я хорошо понимаю концепцию статического, но не в случаеместные классы.
1. Почему статический метод не разрешен в локальных классах?
2. Почему статический локальный класс не разрешен в методе?
Статический метод не разрешен в локальных классах:Здесь я не понимаю Для меня локальный класс привязан к статическому методу main. Я просто не понимаю, почему этого нельзя сделать. Доступ к методу main осуществляется через класс Sequence, а затем, так как sayGoodbye является статическим, к нему следует обращаться через его класс. Но нет.
public class Sequence {
public static void main(String... args) {
class EnglishGoodbye {
public static void sayGoodbye() { // this cannot be done
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
Статический локальный класс не разрешен в методе:Это невозможно сделать: это немного двусмысленно, но я думаю, что статический здесь будет иметь то же значение, что и нестатический, поскольку статический класс привязан к статическому методу. Я не совсем понимаю.
public class Sequence {
public static void main(String... args) {
static class EnglishGoodbye { //static local classes not allowed
public static void sayGoodbye() {
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
Редактировать: Первый ответ, который я получил, был цитатой из оракула:
Локальные классы не являются статичными, потому что они имеют доступ к членам экземпляра вмещающего блока. Следовательно, они не могут содержать большинство видов статических объявлений.
и мой ответ:
Это, правда, не все объясняет. Когда у вас есть внутренний класс, вы не можете получить доступ к нестатическим полям, но вы можете получить доступ к статическим полям. То же самое должно применяться к локальному классу, и поскольку нет статической переменной, то это бесполезно. Но как насчет методов, как в моем примере.
Хорошо, я сделал схему, чтобы лучше объяснить, как я смотрю на вещи. Хотя это может быть совершенно ошибочно, и мне немного стыдно это показать. В этой схеме и в сценарии, где статический локальный классбыло бы быть доступным у меня был бы локальный класс в верхнем блоке памяти. Всякий раз, когда вызывается статический метод2, он просто ссылается на него.