1 什么都不写等同static final, static要求初始化
2 这两个根本不是一个变量
3  Car[] car=new Car[4]; car的类型是Car[],new Car[4]不是new了4个Car,而是1个Car[]

解决方案 »

  1.   

    1,接口中只能有static final(可以忽略不写) 变量吧
    2,不同类的变量虽然名字相同,但是它们属于不同类的所属(即内存位置不同)因此不发生冲突
    3,Car[] car=new Car[4]; 这句并没有把接口实例化,仅能说是开辟了数组空间。可以向下面这么做
    Car[] car=new Car[4]; 
    for(int i=0;i<car.length;i++)
    {
       car[i] = new BmwX5();
    }
      

  2.   

    首先我们要明确一点:接口所有数据成员都是默认static final,而static 定义的成员是类的成员,而不是类对象的成员。所以实现接口的类不能继承接口的成员。
    1。因为是类的变量,在定义的时候就一定的初始化。
    2。BmwX5是实现Car的类,那它并没有继承topSpeed变量。所以如果你用topSpeed=300;就会报一个没有定义的错,而你用int topSpeed=300;就是重新定义了个变量topSpeed和Car里的类变量topSpeed没有任何关系,只不过同名而已。
    3。因为接口没有构造的方法,所以不能Car car=new Car();之所以能够Car[] car=new Car[4]; 可以是定义了一个能装四个实现Car接口的类的数组,但其内容都是null.好累:-)
      

  3.   

    1、因为接口是为解决类之间运行时动态方法调用,需要分配空间所以要用常量初始化。
    2、这里的topSpeed是在BmwX5重新定义的(int topSpeed)。
    3、第一个是定义数组长度(你也可以理解为new了一个含有四个接口的对象)
       第二个是构造接口,而接口是不能构造的(抽象)