关于汽车的练习中的对象继承

时间:2016-06-14 17:14:09

标签: java

我在这里看到一个代码,用于创建对象。

 public static void main(String args[]){
    Car[] cars = new Car[30];
    for (int i = 0; i < 10; i++) {
        cars[i] = new Honda();
        cars[i+10] = new Nissan();
        cars[i+20] = new Subaru();
    }

}
abstract class Car{
    abstract int getDoorCount();
    abstract int getWindowCount();
    abstract int getPrice();
}

class Honda extends Car{

    @Override
    int getDoorCount() {
        return 2;
    }

    @Override
    int getWindowCount() {
        return 0;
    }

    @Override
    int getPrice() {
        return 1000;
    }
}

class Nissan extends Car{

    @Override
    int getDoorCount() {
        return 4;
    }

    @Override
    int getWindowCount() {
        return 0;
    }

    @Override
    int getPrice() {
        return 2000;
    }
}

class Subaru extends Car{

    @Override
    int getDoorCount() {
        return 1;
    }

    @Override
    int getWindowCount() {
        return 1;
    }

    @Override
    int getPrice() {
        return 3000;
    }
}

据我所知创建一个对象我应该创建一个空的和完整的构造函数,对吧?如果是,那么代码的一部分(不是全部写)应该是这样的:

class Honda extends Car{
 public Honda(int getWindowCount,int getDoorCount,int getPrice){
super(getWindowCount,getDoorCount,getPrice);
}

    @Override
    int getDoorCount() {
        return 2;
    }

    @Override
    int getWindowCount() {
        return 0;
    }

    @Override
    int getPrice() {
        return 1000;
    }
}

我尝试做某事但我失败了

public  class Nissan extends Car{ 
private int lights; 
publicNissan(){} 
public Nissan(int getDoorCount,int getWindowCount,int getPrice,int lights){          
      super(getDoorCount,getWindowCount,getPrice);   
 }
public int getlights(){ return lights; } public void setlights(int
 ls){ lights=ls; }
     @Override
     int getDoorCount() {
         return 4;
     }

     @Override
     int getWindowCount() {
         return 0;
     }

     @Override
    int getPrice() {
         return 2000;
     } }

在我的主要部分,我把它称为Nissan.getlights(3);这意味着我给了车3灯,但它不起作用,为什么?

2 个答案:

答案 0 :(得分:0)

当你这样做时:

    public Nissan(int getDoorCount,int getWindowCount,int getPrice,int lights){          
          super(getDoorCount,getWindowCount,getPrice);   
    }
    public int getlights(){ 
         return lights; 
   } 
    public void setlights(int ls){ 
         lights=ls; 
    }

您将3个参数传递给超类 getDoorCount getWindowCount getPrice 但是你没有用最后一个参数初始化成员灯, 这意味着汽车已经初始化,但是日产没有正确/正确地构建......

在那个错误之后,调用灯光的吸气器将不会返回你期望的......

如何解决?:

public Nissan(int getDoorCount,int getWindowCount,int getPrice,int lights){          
      super(getDoorCount,getWindowCount,getPrice);
      this.lights = lights;
 }

答案 1 :(得分:0)

您的getlights()方法没有任何参数因此问题。要获得所需的值,请先致电setlights(3),然后使用getlights()重新读取该值。