静态嵌套类中的方法是否隐式静态?

时间:2013-05-28 09:44:08

标签: java static nested-class

只是寻找确认。

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();它毕竟是静态的,根本不需要实例化内部成员? (我知道我错了,因为如果我这样做就不会编译,但是我想知道为什么)。

提前致谢。

5 个答案:

答案 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