KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've been examining the Java Language Specification here (instead I should be out having a beer) and I am curious about what a method can contain. The specification states a method body can contain a block MethodBody: Block Where a 'Block' contains 'BlockStatements'. The 'BlockStatement' rule looks like this: BlockStatement : LocalVariableDeclarationStatement ClassOrInterfaceDeclaration [Identifier :] Statement I can understand the 'LocalVariableDeclarationStatement' which could be [final] int x, y, z; However, I don't get why the 'ClassOrInterfaceDeclaration' rule is there. This rule looks like: ClassOrInterfaceDeclaration: ModifiersOpt (ClassDeclaration | InterfaceDeclaration) ClassDeclaration: class Identifier [extends Type] [implements TypeList] ClassBody InterfaceDeclaration: interface Identifier [extends TypeList] InterfaceBody What's going on here - You can't declare a class or interface within a block surely? Can someone help elucidate this confusion please? Update : I can define a class within a method, but the following won't work: public class Foo { public void doFoo() { interface dooJa { int bar(); } } } The compiler complains stating "The member interface dooJa can only be defined inside a top-level class or interface"... any explanations?
Tags (comma-separated)
Save Edits
Cancel