我在同一个包里有下面的课程:
class Roo {
public String doRooThings()
{
return "Rooing!";
}
}
class Cloo extends Roo {
public static void main(String[] args)
{
System.out.println(doRooThings());
}
}在执行此操作时,无法从Roo错误类型中对非静态方法doRooThings()进行静态引用。
但是,我可以从子类doRooThings()方法中调用它(而不必用引用作为前缀),如下所示:
class Cloo extends Roo {
public void testRoo()
{
System.out.println(doRooThings());
}
public static void main(String[] args)
{
new Cloo().testRoo();
}
}有人能告诉我这是怎么回事吗?
发布于 2014-12-03 09:55:13
在第一种情况下,主要方法是静态,而方法doRooThings()则是这个非静态方法。在静态方法中,不能引用非静态(实例)方法。
但是在第二种情况下,您可以调用非静态方法testRoo(),因为您在静态上下文中创建了一个实例。类似地,即使在第一种情况下,也可以通过创建实例来调用非静态方法,如下所示:
new ().doRooThings()或new ().doRooThings()
发布于 2014-12-03 09:29:01
因为main()方法在static上下文中运行。静态表示您没有该类的有效实例。这意味着Java不知道在哪个实例上调用该方法.
阅读一些基础知识,如这一解释。
发布于 2014-12-03 09:30:16
main是一个静态方法,因此它不与类的任何实例相关联。因此,它不能调用实例方法(因为它需要与实例相关联),除非它首先创建一个实例。也许你需要读更多关于静态意义的文章
https://stackoverflow.com/questions/27267919
复制相似问题