访问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 和变量访问。所以应该使用 CarSpeedMetric,因此 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 计算出来,所以我不会单独传递它。