从内部类创建对象

时间:2016-02-17 09:05:02

标签: java eclipse

尝试运行车辆问题,稍微调试但发现问题出在 Car joe = new Car(1234567,' R',4);

public class Vehicle {

    private int engineNum;
    private char color;

    public void setNum(int num) { engineNum=num; }
    public void setColor(char color) { this.color = color; }
    public void printVehicle() {
        System.out.println("Engine No.: " + engineNum);
        System.out.println("Vehicle Color: " + color);
    }

    class Car extends Vehicle {
        private int doors;
        public Car(int num, char color, int doors){
            setNum(num);
            setColor(color);
            this.doors = doors;
        }
        public void printCar() {
            System.out.println("=====Car Info=====");
            printVehicle();
            System.out.println("Car door no.: " + doors);
        }
    }

    public static void main(String[] args) {
        **Car joe = new Car(1234567, 'R', 4);**
        Car jane = new Car(5678924, 'B', 5);
        joe.setColor('W');
        joe.printCar();
        jane.printCar();
    }
}

留言: 无法访问类型为Vehicle的封闭实例。必须使用Vehicle类型的封闭实例限定分配(例如x.new A(),其中x是Vehicle的实例)。

1 个答案:

答案 0 :(得分:2)

这里的问题是你将Car定义为Vehicle的内部类。因此,Car对象绑定到Vehicle的特定实例。在您尝试创建Car时,它没有要创建的Vehicle实例,因此出现错误。有两种方法可以解决这个问题:

  • 使Car类静态。此选项并不适用于您的情况 因为你需要Car的不同实例,这些实例需要能够访问Vehicle变量和方法。
  • 将Car类移到Vehicle类之外。如果它被定义为不是内部类,你将能够在没有Vehicle实例的情况下实例化它,实际上它将是它自己的Vehicle实例。