Java继承子类和超类

3
我在网上找到了这些问题(滑铁卢大学考试学习问题https://www.student.cs.uwaterloo.ca/~cs125/S08/Resources/Exams/StudyQuestions/W07ExamReview/inheritance_questions.txt),但它们没有提供任何答案,所以我想知道我的答案是否正确。
  1. 假设名为SportsCar的类是名为Automobile的类的子类。假设类Automobile具有名为speed、manufacturer和numberOfCylinders的实例变量。类SportsCar的对象会有名为speed、manufacturer和numberOfCylinders的实例变量吗?
  2. 假设名为SportsCar的类是名为Automobile的类的子类,并且假设类Automobile具有名为accelerate和addGas的公共方法。类SportsCar的对象会有名为accelerate和addGas的方法吗?如果有,这些方法在类SportsCar中必须执行与类Automobile中完全相同的操作吗?
  1. 子类继承了所有父类的方法和变量,因此为真。

  2. 类 SportsCar 将拥有 addGas 方法,但它执行的动作与类 Automobile 中的方法不完全相同。

提前感谢你!


啊,如果子类继承了父类,那么子类中的方法名称会和父类中的方法名称相同吗? - user3529827
谢谢,我有一个快速问题想问您,因为您现在在线。子类的实例是否被视为超类的实例? - user3529827
是的,如果你有一个对象Vehicle,而Car是它的子类。你可以拥有一个Vehicle列表,而Car将被视为一辆车。总之,这个主题主要涉及多态性,它是与对象的“是一个”关系相关的。例如汽车“是一个”车辆。明白了吗? :) @user3529827 - Josef E.
啊,非常感谢! - user3529827
还要查看instanceof()方法,它是一种条件语句,用于比较对象的类型。 - Josef E.
显示剩余2条评论
3个回答

4
  1. 一般而言是不行的,因为它没有指定评估修饰符,这意味着如果速度是私有的,则SportCar将没有该属性。

  2. SportCar对象将拥有addGas方法,并且除非在SportCar中重写了公共方法addGas,否则会执行Automobile类的实例相同的操作。


嗯,我猜这些问题的答案会因情况而异。子类不能继承私有变量和方法,对吧? - user3529827
这是一个多选题吗?正如您所见,我没有提供太多答案。 - Vilen
我把我的问题和我得到问题的URL一起发布了。我猜这些问题的措辞并不完美。 - user3529827
好的,问题的措辞很好,这些问题相当简单,只是有点巧妙,并且我猜测它们测试你对细节的注意力。 - Vilen

0

1)除非实例变量是私有的,否则不正确。

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


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;
    }
}

尽管跑车没有直接访问它们的权限,但它仍然可以根据汽车的实现修改这些值。

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
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接