在main方法中实例化内部类

时间:2017-03-25 15:09:14

标签: java instantiation inner-classes main-method

当我们尝试在java中实例化一个Inner类(又名:非静态嵌套类)时,假设我们在两种情况下这样做:

1.在外部类的同一文件中的main方法中,我们有两个选项:(例如:)

public class Test1
{
   class InnerClass
   {

   }
  public static void main(String[] args)
  {
     InnerClass inner = new Test1().new InnerClass();
  }
}

或:

public class Test1
{
   class InnerClass
   {

   }
  public static void main(String[] args)
  {
     Test1.InnerClass inner = new Test1().new InnerClass();
  }
}
  1. 在另一个类(比如说不同的文件)中,我们只有第二个选项,使用第一个选项需要我们(当然)导入InnerClass ..,
  2. 问:你能解释一下为什么我们在第一种情况下(同一文件中的主要方法)有第一个选项(不需要任何导入)?

    修改

    我想第一个问题的答案是一些与内部类的核心思想有关的问题。但接着+ Q:

    问:内部类不是外部类的常规成员,因此如果内部类未声明为静态(静态嵌套类),那么我认为它是非静态成员,因此它的引用类型,那么为什么我们能够在静态上下文中声明它(静态方法)?

2 个答案:

答案 0 :(得分:2)

简单地说,这是因为当你从内部类所在的类之外的main方法实例化内部类时,Java编译器无法知道哪个类位于内部类中。因此你必须做

Test1.InnerClass innerClassObject = ...

而不是

InnerClass innerClassObject = ...

答案 1 :(得分:0)

  

InnerClass的一个实例只能存在于一个实例中   OuterClass并且可以直接访问其方法和字段   封闭实例。

     

要实例化内部类,必须首先实例化外部   类。然后,使用它在外部对象中创建内部对象   语法:

     

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

来自Oracle文档:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html