只是寻找确认。
public class Indeed{
public static class Inner implements Runnable{
public void run()
{
System.out.println("Indeed");
}
}
public static void main (String []args)
{
Indeed.Inner inner = new Indeed.Inner();
inner.run();
}
}
正如您在上面的代码中看到的,我可以声明public void run()
而不声明 static 。我猜这是暗示完成的。不是吗?
还有一个问题:为什么我不能使用如下运行方法:Indeed.Inner.run();
它毕竟是静态的,根本不需要实例化内部成员? (我知道我错了,因为如果我这样做就不会编译,但是我想知道为什么)。
提前致谢。
答案 0 :(得分:4)
正如您在上面的代码中看到的,我可以声明public void run()而不声明它是静态的。我猜这是暗示完成的。不是吗?
没有
还有一个问题:为什么我不能使用如下运行方法:Indeed.Inner.run();
因为它不是静止的。
static class
仅对内部类有效,您可以通过其封闭类指向静态类Indeed.Inner
。
这与非静态内部类不同,在非内部类中,您需要封闭类的实例来创建同一个类的实例。例如:
Indeed.Inner inner = new Indeed().new Inner();
答案 1 :(得分:2)
不,run()
是静态类Inner
的实例方法。 static
(内部)类使得可以使用没有封闭父实例的类的实例。当您执行Indeed.Inner inner = new Indeed.Inner();
时,您正在创建静态类的实例,并且您正在此实例上调用它的run()
方法。
答案 2 :(得分:1)
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
非静态嵌套类(内部类)可以访问封闭类的其他成员
静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。
答案 3 :(得分:1)
静态类只是一个常规类,实际上比非静态类更重要。
静态嵌套类和顶级类之间的区别只是访问作用域:静态类可以访问其封闭类的私有成员。
一旦你清理完了,你就不需要问你在这里问的问题了。
答案 4 :(得分:0)
静态内部类
public static class Inner implements Runnable
表示您可以创建它们的实例,而无需创建外部类的实例(Indeed
)
Indeed.Inner inner = new Indeed.Inner();
为什么我不能使用如下运行方法:Indeed.Inner.run()?
run
方法默认为非静态。要直接致电Indeed.Inner.run()
,您还需要run()
方法static