要调用内部类的函数,我只需要内部类的一个对象。但是如果我已经创建了对象,为什么我不能在任何我想要的地方调用内部类的方法呢?错误试图暗示什么?
class Outer
{
int x;
class Inner // creating an Inner class
{
public void display()
{
System.out.println("Hello from Inner class"+x);
}
}
Inner i = new Inner();
i.display(); // This is where the error comes. Why do I have to create a method to call
// methods of my inner class. Why Can't I call it anywhere I want?
}
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
2条答案
按热度按时间zc0qhyus1#
那么为什么编译器会拒绝这段代码呢?
因为代码在语法上与java一样无效,java编译器需要拒绝无效的代码。
java语言规范指出,唯一可以立即嵌套在类中的是成员声明或初始值设定项块。成员声明如下:
字段声明
嵌套类、接口、枚举等
方法
建设者
初始值设定项块是
static
初始值设定项块或示例初始值设定项块。一个典型的语句(如您试图插入的语句)既不是成员声明也不是块。
java语言规范的相关部分是jls 8.1.6
pw136qt22#
您正试图直接在类主体中运行一段代码。类的主体只能用于初始化和函数创建。什么
Java
是否,是遍历类的所有已创建成员并初始化它们,就像您对Inner i = new Inner()
.要运行一段代码,它必须位于函数内部,并且必须调用此函数!一个很好的例子是
main()
功能。您在其中写入的任何内容都将被执行,因为该函数将在程序运行后立即调用。但是,如果在函数的中间抛出一个错误,您还应该知道执行将被中断,并且直到结束时才执行命令。