理解Java扩展类的实现

理解Java扩展类的实现,java,class,oop,Java,Class,Oop,我目前正在学习Java,我的任务是理解OOP。 我理解课堂的理论,但我有一个关于实施的问题 以下面的代码为例: class Vehicle { private String engine; private int wheels; private int seats; private int fuelTank; private String lights; public Vehicle() { this.engine = "petrol";

我目前正在学习Java,我的任务是理解OOP。 我理解课堂的理论,但我有一个关于实施的问题

以下面的代码为例:

class Vehicle {
  private String engine;
  private int wheels;
  private int seats;
  private int fuelTank;
  private String lights;

  public Vehicle() {
    this.engine = "petrol";
    this.wheels = 4;
    this.seats = 4;
    this.fuelTank = 35;
    this.lights = "LED";

  }

  public Vehicle(String engine, int wheels, int seats, int fuelTank, String lights) {

    this.engine = engine;
    this.wheels = wheels;
    this.seats = seats;
    this.fuelTank = fuelTank;
    this.lights = lights;
  }

  public String getEngine() {
    return engine;
  }

  public int getWheels() {
    return wheels;
  }

  public int getSeats() {
    return seats;
  }

  public int getFueTank() {
    return fuelTank;
  }

  public String getLights() {
    return lights;
  }

}

class Car extends Vehicle {
  private String steering;
  private String musicSystem;
  private String airConditioner;
  private String fridge;
  private String entertainmentSystem;

  public Car() {
    super();
    this.steering = "Power Steering";
  }

  public Car(String steering, String engine, int wheels, int seats, int fueTank, String lights) {
    super(engine, wheels, seats, fueTank, lights);
    this.steering = steering;
  }

  public String getSteering() {
    return steering;
  }
}

class Demo {
  public static void main(String[] args) {

    Car car = new Car("Power steering", "deisel", 4, 4, 40, "LED");

    System.out.println("Steering: " + car.getSteering());
    System.out.println("Engine type: " + car.getEngine());
    System.out.println("Number of seats: " + car.getSeats());
    System.out.println("Fuel tank capacity: " + car.getFueTank());
    System.out.println("Head lamp type: " + car.getLights());
    System.out.println("Number of wheels: " + car.getWheels());
  }

}
我在这里了解到,您可以使用默认构造函数或参数化构造函数创建
车辆
对象。我还可以对从
Vehicle
扩展的
Car
对象执行相同的操作。我理解,通过在默认构造函数中使用
super()
,它将使用
Vehicle
中的默认构造函数以及
Car
对象转向变量默认值。使用
super(args)
参数化构造函数也是如此

我在理解如何在每种扩展车型中对车轮进行硬编码时遇到了一个问题


为了进一步解释,我不想在创建
Car
对象时在构造函数中包含轮子。我希望它默认为4。另外,如果我要创建一个从
Vehicle
扩展的
Bike
对象,我希望wheels变量默认为2。

如果你真的想使用你的超类属性,请将它们的访问修饰符类型改为受保护,否则你将无法在你的子类中直接使用它们

然后,您可以使用IIB(实例初始化块)为每个不同的子类定义变量值

样品溶液: Vehicle.java java
如果你真的想使用你的超类属性,请将它们的访问修饰符类型更改为受保护,否则你将无法在你的子类中直接使用它们

然后,您可以使用IIB(实例初始化块)为每个不同的子类定义变量值

样品溶液: Vehicle.java java
你可以按如下方式做

private final String steering; // final = constant, will not change.

public Car(String steering, String engine, int seats, int fueTank, String lights) {
    super(engine, 4 /*wheels*/, seats, fueTank, lights);
    this.steering = steering;
}

public Car(String steering, String engine, int fueTank, String lights) {
    this(steering, engine, 4 /*seats*/, fueTank, lights);
}
正如您在这里看到的,几个构造函数和许多参数可能会变得很麻烦


有时,最好为特殊字段设置setter。

您可以按如下方式执行

private final String steering; // final = constant, will not change.

public Car(String steering, String engine, int seats, int fueTank, String lights) {
    super(engine, 4 /*wheels*/, seats, fueTank, lights);
    this.steering = steering;
}

public Car(String steering, String engine, int fueTank, String lights) {
    this(steering, engine, 4 /*seats*/, fueTank, lights);
}
正如您在这里看到的,几个构造函数和许多参数可能会变得很麻烦

有时,最好为特殊领域设置设置器

private final String steering; // final = constant, will not change.

public Car(String steering, String engine, int seats, int fueTank, String lights) {
    super(engine, 4 /*wheels*/, seats, fueTank, lights);
    this.steering = steering;
}

public Car(String steering, String engine, int fueTank, String lights) {
    this(steering, engine, 4 /*seats*/, fueTank, lights);
}