访问inner nested 类时是否必须创建一个新对象?
Do you have to create a new object when accessing inner nested classes?
假设您在 Java 有 class 辆汽车。
这 class 汽车有内部 classes:速度、里程、零件、标识,每个都有自己各自的变量等...有些可能有自己的内部 classes。
Java代码(示例,不是真实的java):
public class car {
public class speed {
String inmiles;
public class metric {
String inkm;
}
}
public car(arguments...){
speed.inmiles = argument1;
speed.metric.inkm = argument2;
}
}
如果你在主class(方法)中用new
关键字声明了一个汽车对象,并且想为构造函数提供参数来填充内部classes' variablese,你是否也必须在 main 中声明内部 classes?
无论内部 classes 和变量是否设置为 public,从汽车 class 内部访问内部 classes 都无法正常工作。 =13=]
有点像下面的例子,你可以使用内部 类:
public class HelloWorld {
public static void main(String []args){
Test t = new Test(1, 2);
System.out.println(t.a);
t.printTest2B();
}
}
class Test {
public int a;
public Test2 t2;
class Test2 {
int b;
Test2(int b) {
this.b = b;
}
}
public Test(int a, int b) {
this.t2 = new Test2(b);
this.a = a;
}
public void printTest2B() {
System.out.println(t2.b);
}
}
根据我的评论,请注意 class 名称应以大写字母开头,以便更容易区分 class 和变量访问。所以应该使用 Car
、Speed
和 Metric
,因此 Speed.inmiles
表示 inmate
是一个 class 变量,如果它不是你会不会更容易看到错误。
也就是说,您的代码需要创建实例,然后为它们的 fields/instance 变量赋值。
基于您的代码的非常简化的示例:
public class Car {
Speed speed;
public class Speed {
String inmiles;
Metric metric;
public class Metric {
String inkm;
}
}
public Car(String speedInMiles, String speedInKm){
//create the instance of Speed first
speed = new Speed();
speed.inmiles = speedInMiles;
//create the instance of Metric
//since Metric is an inner class of Speed you need an instance of Speed first
//so we'll use the "speed" instance created earlier here
speed.metric = speed.new Metric();
speed.metric.inkm = speedInKm;
}
}
最后一个设计建议(还有更多,但我会限制自己:)):不要将 String
用于基本数值,而是使用例如double inMiles
等。还要注意 inKm
可以从 inMiles
计算出来,所以我不会单独传递它。
假设您在 Java 有 class 辆汽车。 这 class 汽车有内部 classes:速度、里程、零件、标识,每个都有自己各自的变量等...有些可能有自己的内部 classes。
Java代码(示例,不是真实的java):
public class car {
public class speed {
String inmiles;
public class metric {
String inkm;
}
}
public car(arguments...){
speed.inmiles = argument1;
speed.metric.inkm = argument2;
}
}
如果你在主class(方法)中用new
关键字声明了一个汽车对象,并且想为构造函数提供参数来填充内部classes' variablese,你是否也必须在 main 中声明内部 classes?
无论内部 classes 和变量是否设置为 public,从汽车 class 内部访问内部 classes 都无法正常工作。 =13=]
有点像下面的例子,你可以使用内部 类:
public class HelloWorld {
public static void main(String []args){
Test t = new Test(1, 2);
System.out.println(t.a);
t.printTest2B();
}
}
class Test {
public int a;
public Test2 t2;
class Test2 {
int b;
Test2(int b) {
this.b = b;
}
}
public Test(int a, int b) {
this.t2 = new Test2(b);
this.a = a;
}
public void printTest2B() {
System.out.println(t2.b);
}
}
根据我的评论,请注意 class 名称应以大写字母开头,以便更容易区分 class 和变量访问。所以应该使用 Car
、Speed
和 Metric
,因此 Speed.inmiles
表示 inmate
是一个 class 变量,如果它不是你会不会更容易看到错误。
也就是说,您的代码需要创建实例,然后为它们的 fields/instance 变量赋值。
基于您的代码的非常简化的示例:
public class Car {
Speed speed;
public class Speed {
String inmiles;
Metric metric;
public class Metric {
String inkm;
}
}
public Car(String speedInMiles, String speedInKm){
//create the instance of Speed first
speed = new Speed();
speed.inmiles = speedInMiles;
//create the instance of Metric
//since Metric is an inner class of Speed you need an instance of Speed first
//so we'll use the "speed" instance created earlier here
speed.metric = speed.new Metric();
speed.metric.inkm = speedInKm;
}
}
最后一个设计建议(还有更多,但我会限制自己:)):不要将 String
用于基本数值,而是使用例如double inMiles
等。还要注意 inKm
可以从 inMiles
计算出来,所以我不会单独传递它。