如何从 .java 文件 (Java) 之外实例化嵌套在 class 中的 class?

How to instantiate a class that is nested inside a class from outside that .java file (Java)?

我有两个 classes,Main 和 SPBHomeHelp。这是 Main 的代码:

public class Main{

      SPBHomeHelp homeHelp;

      public Main(){

            homeHelp = new SPBHomeHelp();

            Home home = new Home();

      }

 }

这是 SPBHomeHelp 的代码:

public class SPBHomeHelp{

      public SPBHomeHelp(){

      }

      public class Home{

            public Home(){

                  System.out.println("Entered Home Constructor");

            }

      }

}   

Main 和 SPBHomeHelp 是两个不同的 .java 文件。我可以轻松地为 SPBHomeHelp 声明和实例化一个实例。但是我也想在 Main 中有一个 Home 实例,它是一个嵌套在 SPBHomeHelp 中的 class。我试过了:

Home home = new Home();

因为主页是 public,但这不起作用。如何在 Main 中创建 Home 实例?

home 是 inner-class Home 类型的实例(来自 class SPBHomeHelp)。您需要 class 的一个实例(即 homeHelp),以便构造一个 Home 实例。我想你正在寻找类似

的东西
SPBHomeHelp.Home home = homeHelp.new Home();

将 class Home 更改为 static,并且 static import 您的 Home class。

public class SPBHomeHelp{

      public SPBHomeHelp(){

      }

      public static class Home{

            public Home(){

                  System.out.println("Entered Home Constructor");

            }

      }

}   

主要:

static import SPBHomeHelp.Home;
public class Main{

      SPBHomeHelp homeHelp;

      public Main(){

            homeHelp = new SPBHomeHelp();

            Home home = new Home();

      }

 }

有两种实现方式:

首先,,就像你接受的答案:

SPBHomeHelp.Home home = new SPBHomeHelp().new Home();

第二个,让你的Homestatic,然后,在你的Main.main()方法中,

SPBHomeHelp.Home home = new SPBHomeHelp.Home();

会好的。

PS:static inner classnon-static inner class的区别是:在non-static inner class中,有一个this指的是外层class,这意味着你可以在non-static inner class中使用外部class的字段和方法。但是你不能在 static inner class 中使用外部 class 的字段和方法,除非它们也是 static.