Java继承子类和超类

时间:2014-06-05 18:42:13

标签: java inheritance

我在网上发现了这些问题(滑铁卢大学考试学习问题https://www.student.cs.uwaterloo.ca/~cs125/S08/Resources/Exams/StudyQuestions/W07ExamReview/inheritance_questions.txt),但是他们发布时没有任何答案,所以我只想知道我是否正确。

  1. 假设名为SportsCar的类是名为Automobile的类的子类。假设汽车类具有名为speed,manufacturer和numberOfCylinders的实例变量。 SportsCar类的对象是否有名为speed,manufacture和numberOfCylinders的实例变量?

  2. 假设名为SportsCar的类是名为Automobile的类的子类,并假设类Automobile具有名为accele和addGas的公共方法。 SportsCar类的对象是否有名为accele和addGas的方法?如果是这样,这些方法是否必须在类SportsCar中执行与在Automobile类中完全相同的操作?

    1. 是的,因为子类继承了所有的超类方法和 变量

    2. 类SportsCar会有方法addGas,但它不会执行 与“汽车”类中的方法“完全相同”的操作。

    3. 提前谢谢!

3 个答案:

答案 0 :(得分:4)

  1. 一般不会,因为它没有指定评估修饰符,这意味着如果速度是私有的,那么SportCar将不具备该属性

  2. SportCar的对象将具有addGas并将执行与Automobile类实例相同的操作,除非在SportCar中未覆盖公共方法addGas

答案 1 :(得分:0)

1)正确,除非实例变量是私有的

2)SportsCar可以覆盖该方法,因此 不会完全相同。 SportsCar甚至可以根据方法的参数数量和类型重载addGas以执行不同的操作。

答案 2 :(得分:0)

1。 这取决于实施。如果访问修饰符是私有的,则子类(SportsCar)将不会“访问”它们,但这并不意味着它们不存在。例如,SportsCar可以通过构造函数更改这些值,如下所示。

public class Automobile {
    private int speed;
    private int manufacture;
    private int numberOfCylinders;

    public Automobile(int speed, int manufacture, int numberOfCylinders) {
        this.speed = speed;
        this.manufacture = manufacture;
        this.numberOfCylinders = numberOfCylinders;
    }
}

虽然Sportscar不能直接访问它们,但它仍然可以根据汽车的实施情况修改值。

public class SportsCar extends Automobile {

    public SportsCar() {
        super(5, 10, 20);
    }

}

2。  是的,它会覆盖它们。但这又取决于汽车中那些方法的访问修饰符。

public class Automobile {
    public void addGas(){
        //adding gas
    }
}

public class SportsCar extends Automobile {
    @Override
    public void addGas() {
        // Do Something else
    }
}