如何从 .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();
第二个,让你的Home
static
,然后,在你的Main.main()
方法中,
SPBHomeHelp.Home home = new SPBHomeHelp.Home();
会好的。
PS:static inner class
和non-static inner class
的区别是:在non-static inner class
中,有一个this
指的是外层class,这意味着你可以在non-static inner class
中使用外部class的字段和方法。但是你不能在 static inner class
中使用外部 class 的字段和方法,除非它们也是 static
.
我有两个 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();
第二个,让你的Home
static
,然后,在你的Main.main()
方法中,
SPBHomeHelp.Home home = new SPBHomeHelp.Home();
会好的。
PS:static inner class
和non-static inner class
的区别是:在non-static inner class
中,有一个this
指的是外层class,这意味着你可以在non-static inner class
中使用外部class的字段和方法。但是你不能在 static inner class
中使用外部 class 的字段和方法,除非它们也是 static
.