【问题标题】:Java Inheritance subclass and superclassJava继承子类和超类
【发布时间】:2014-06-05 18:42:13
【问题描述】:

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

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

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

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

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

提前谢谢你!

【问题讨论】:

  • 问题 2 有点棘手,你不会有子类中的方法。但是,您仍然可以从超类中调用它们(使其完全相同)。
  • 啊,如果继承父类,子类中的方法会和超类中的方法同名吗?
  • 是的,同名。功能取决于您是否覆盖
  • 谢谢,因为您现在在这里,所以只是一个简单的问题。子类的实例是否被视为超类的实例?
  • 是的,如果你有一个对象Vehicle 并且Car 是它的子类。您可以拥有Vehicle 的列表,而Car 将被视为车辆。总而言之,这个主题主要是处理多态性,它是与对象的“是”关系。 示例汽车“IS A”车辆。得到它? :) @user3529827

标签: java inheritance


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

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

【讨论】:

  • 嗯,所以我想这些问题会根据具体情况有很多不同的答案。子类不能继承私有变量和方法吧?
  • 是选择题吗?如您所见,我没有提供很多答案
  • 我用收到问题的网址发布了我的问题。我猜这些问题的措辞并不完美
  • 嗯,问题的措辞很好,这些都是相当简单的问题,它们只是包含技巧,我想测试你对细节的关注
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多