奇怪的是不能创建本地接口,但是可以创建抽象的本地类。
问题:为什么不允许本地创建接口,而允许创建抽象类?
了解和理解这种奇怪的原因非常有趣。另一件事,如果抽象类也被禁止在本地创建,那么至少在“假设”层面上会更容易理解
注意:如果突然发现这个问题是重复的,那么只需将链接粘贴在评论中,不要投反对票。如果链接的内容给出了详尽的答案,那么我将删除我的问题。
奇怪的是不能创建本地接口,但是可以创建抽象的本地类。
问题:为什么不允许本地创建接口,而允许创建抽象类?
了解和理解这种奇怪的原因非常有趣。另一件事,如果抽象类也被禁止在本地创建,那么至少在“假设”层面上会更容易理解
注意:如果突然发现这个问题是重复的,那么只需将链接粘贴在评论中,不要投反对票。如果链接的内容给出了详尽的答案,那么我将删除我的问题。
根据en-SO,答案是鉴于本地类和接口的定义,语言规范中明确不允许这样做。而且,大概,语言设计者认为没有理由允许它。
本地类始终是内部类 [ 1 ],除非在文件中声明,否则接口是隐式静态的,因此不能被视为内部类 [ 2 ]
结果,方法的主体声明如下:
并
Block声明如下:从上面可以看出,可以在方法中声明局部变量、类或者使用表达式。接口 - 这是不可能的。
做出这样的决定可能是因为该语言的开发人员没有看到这样一个机会可以解决的问题。
因为接口必须是静态的,并且总是隐式声明为静态的,但在 Java 中,任何本地都不能是静态的。出于同样的原因,本地类也不能是静态的。此外,在本地和一般情况下,任何内部非静态类、静态块、方法和字段也被禁止,但常量除外,即字段除外
static final。在 C 语言中,您可以创建静态局部变量,这意味着此类变量的值将一直存储到下一次函数调用,也就是说,用于此类变量的内存在程序结束之前不会被释放。Java 决定不走这条路。