【问题标题】:How to instantiate a class that is nested inside a class from outside that .java file (Java)?如何从 .java 文件(Java)外部实例化嵌套在类中的类?
【发布时间】:2015-04-23 02:50:14
【问题描述】:

我有两个类,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 中的类。我试过了:

Home home = new Home();

因为 Home 是公开的,但这不起作用。如何在 Main 中创建 Home 实例?

【问题讨论】:

    标签: java class nested instance instantiation


    【解决方案1】:

    有两种实现方式:

    首先,,就像您接受的答案一样:

    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引用外部类,也就是说可以使用外部类的字段和方法在non-static inner class。但是你不能在static inner class 中使用外部类的字段和方法,除非它们也是static

    【讨论】:

      【解决方案2】:

      home 是内部类 Home 类型的实例(来自类 SPBHomeHelp)。您需要该类的一个实例(即homeHelp),以便构造一个Home 实例。我认为您正在寻找类似的东西

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

      【讨论】:

        【解决方案3】:

        Home 类更改为static,并将static import 更改为Home 类。

        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();
        
              }
        
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 2018-01-19
          • 2013-08-20
          • 2019-01-06
          • 1970-01-01
          相关资源
          最近更新 更多