【问题标题】:Is it possible to assign an instance of a subclass to a variable of a superclass?是否可以将子类的实例分配给超类的变量?
【发布时间】:2020-04-11 22:01:21
【问题描述】:

我对超类和子类背后的定义和逻辑感到困惑。

【问题讨论】:

    标签: java inheritance subclass superclass


    【解决方案1】:

    总之——是的。由于子类实例“isA”超类,你可以将它分配给这样的变量。

    考虑以下示例 - StringObject,因此此分配是合法的:

    Object obj = "abcd"; // this is a string literal
    

    【讨论】:

      【解决方案2】:

      为了快速回答您的问题:是的,几乎可以在超类所在的任何位置分配子类。

      这样做的原因涉及继承和面向对象的编程。让我给你举个例子。让我们想想作为火车一部分的火车和有轨电车。

      超类RailwayCar。每个铁路车厢都有重量。

      public class RailwayCar {
         private int weight;
      
         public RailwayCar() {
         }
      
         public RailwayCar(int weight) {
            setWeight(weight);
         }
      
         public int getWeight() {
            return weight;
         }
      
         public void setWeight(int weight) {
            this.weight = weight;
         }
      
         public void arriveAtStation(Station station) {}
      
         public void leaveStation(Station station) {}
      }
      

      这只是一辆基本的汽车。但是,有特殊的汽车。

      // Engines have power in addition to weight
      public class Engine extends RailwayCar {
         private int power;
      
         public Engine(int weight, int power) {
            super(weight);
            setPower(power);
         }
      
         public void setPower(int power) {
            this.power = power;
         }
      
         public int getPower() {
            return power;
         }
      }
      

      还有其他类型的汽车。例如,可能有一个乘客车,其中随着乘客上下车,每个车站的重量可能会发生变化。对于特定类型的货物,有特定类型的汽车。 LogCar 将包含长日志。

      RailwayCar 的所有这些子类都可以覆盖车站方法(arriveAtStation() 和 leaveStation()),以通过覆盖这些方法来执行特定操作。

      所有这些汽车都可以放入同一个列表或数组中。例如,RailwayCar[] 车,或 List cars = new ArrayList();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-07
        • 2019-01-25
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多