2017-10-15 144 views
2

我只是试验内部类,并遇到了本地但静态的内部类的想法...以及我在静态方法内做了一个内部类..以及它只是简单的.. 这里是我做的例子有什么叫做Local Static Inner Class?

class Outer { 

    static void m() { 
     class LocalStatic { 

      void s() { 
       System.out.println("static local inner class method"); 
      } 

     } 
    } 
} 

class Demo { 

    public static void main(String args[]) { 

     Outer.m(); 
    } 
} 

这没有给出任何编译错误。

我知道如何访问静态方法m。但我想知道是否有办法从外部类访问本地类LocalStatic ..就我的理解而言,我们无法访问方法内的某些东西吗?因此,我不能访问任何LocalStatic或任何方法或类只是想确保外本地类的内部属性..

+0

“但我想知道是否有方法从外部类访问本地类LocalStatic”不,因为它的作用域为方法'm'的主体。 –

+0

本地类只能在您定义它们的方法中访问。 – QBrute

回答

6

我想知道是否有一种方式来访问来自外部类的本地类LocalStatic

没有办法做到这一点。本地类是本地的,所以访问它们的唯一方法是从类的范围*

您可以访问使用非本地基类或接口的本地类的对象:

interface SomeInterface { 
    void s(); 
} 
class Outer { 
    static SomeInterface m() { 
     class LocalStatic implements SomeInterface { 
      public void s() { 
       System.out.println("static local inner class method"); 
      } 
     } 
     return new LocalStatic(); 
    } 
} 

现在你可以写

SomeInterface i = Outer.m(); 
i.s(); 

Demo.

*它去不用说也有通过反思来访问这些类的方法,但这是J的能力之外ava语言本身。

+0

有趣..谢谢=)我们可以通过从另一个外部类扩展本地类LocalStatic来做到这一点,对吗? –

+0

@DiliniPeiris绝对,没错。 – dasblinkenlight

0

您可以在任何方法或构造函数或初始化程序中声明一个类。这样的班级被称为本地班。该方法是否是静态的并不相关。除了声明的方法或构造函数或初始化方法之外,不可能从代码的任何部分引用这样的类。

本地类几乎从不使用。我知道多年来一直是专业的java程序员的人,他们不知道可以在方法中声明类。

+2

像我一样。我会因此失败Java认证。我当然知道匿名课程,但这个构造不是我所知道的。 –

+0

但是匿名内部类是本地类的权利?我们在使用函数接口时使用匿名内部类 –

+0

我不是100%确定的术语,但我认为本地类引用了在方法/构造函数/初始化方法中定义的命名类,因此匿名类不计数。 –

1

“因此,我无法从类外部访问LocalStatic或本地类内的任何方法或属性Outer只是想确保..”范围甚至小于Outer类 - 您可以访问LocalStatic类只有在m()方法。

1

标题中问题的答案是,您可以在静态上下文(静态方法或静态初始化程序)中声明本地内部类,但不会有封闭类实例。因此,它使某种意义上称之为

本地静态内部类

也许

本地Static Nested Class和

我从来没有见过任何人这样称呼或者实际上使用它们。

+0

Upvoted指出本地类可以在初始化程序中定义(我把这个例子留在了我的初始答案中)。 –