java - 关于构造一个不使用 super() 扩展抽象类构造函数的子类的问题

标签 java oop inheritance

我是 Java OOP 的新手,并且一直在阅读一本名为 AP Computer Science in Java 的 GitBook 来研究这一点 我发现这个页面非常困惑:https://codehs.gitbooks.io/apjava/content/Classes-And-Object-Oriented-Programming/class-design-and-abstract-classes.html

代码是这样的

public abstract class VehicleClass {
    private String type;
    private String vehicleName;

    public VehicleClass(String vType, String vName) {
        type = vType;
        vehicleName = vName;
    }

    /* This will need to be abstract, since 
     * we will need to implement different formulas
     * depending on if the vehicle is electric or 
     * gas powered.
     */ 
    public abstract double getMileage();
}

/* As you can see, in both classes, we have `getMileage` implemented
 * with different formulas.
 */ 
public class Truck extends VehicleClass {
    private double gasTankCapacity;
    private double milesPerTank;

    public Truck(double capacity, double miles) {
        gasTankCapacity = capacity;
        milesPerTank = miles;
    }

    public double getMileage() {
        return milesPerTank/gasTankCapacity;
    }
}

public class ElectricCar extends VehicleClass {
    private double maxCharge;
    private double milesPerCharge;
    private double maxEnergyUsage;

    public ElectricCar(double charge, double maxEnergy, double milesCharge) {
        maxCharge = charge;
        maxEnergyUsage = maxEnergy;
        milesPerCharge = milesCharge;
    }

    public double getMileage() {
        return (maxCharge*milesPerCharge)/maxEnergyUsage;
    }
}

我的问题是: 1.他为什么不使用super()来构建两个子类的构造函数? 。他不需要传递 type 和 vehicleName到父类(super class)的构造函数? 2.他为什么要打字和vehicleName中超类为private ?我知道子类不能从父类(super class)继承实例变量。他为什么不使用保护呢?

最佳答案

  1. 你完全正确!该代码将无法编译。

  2. 如果不知道这些变量和类的用途,就很难说。

关于java - 关于构造一个不使用 super() 扩展抽象类构造函数的子类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604112/

相关文章:

java - 如何从 JBoss AS 7 上的(可能是远程的)Web 应用程序访问 OSGi 服务?

java - 使用回收无效从 arraytlist 中清除位图,ANDROID

java - 如何确定字符串列表是否包含 null 或空元素

Java - 以 netbeans 形式向按钮添加方法

C++ 隐式转换运算符

java - 斯卡拉 : class[T] extends T?

java - 有没有办法在监听器中获取路由 key

javascript - JS : is it possible to define getter functions on array members?

c# - C# 8 默认接口(interface)实现是否允许多重继承

javascript - 对象与类与函数