理解这个 Java 程序的执行流程

Understanding execution flow of this Java programme

初学Java谁能给我解释一下下面代码的执行流程?我对输出很困惑。

这是代码:

public class MainClass {
    public static void main(String[] args) {
        car c = new car();
        vehicle v = c;
        /* I am unable to understand what's happening while printing the values using the objects of the different classes*/

        System.out.println("|" + v.getModelName()
                + "|" + c.getModelName()
                + "|" + v.getRegNo() + "|" + c.getRegNo() + "|");
    }
}

class vehicle {
    public static String getModelName() {
        return "Volvo";
    }

    public long getRegNo() {
        return 12345;
    }
}

class car extends vehicle {
    public static String getModelName() {
        return "Toyota";
    }

    @Override
    public long getRegNo() {
        return 54321;
    }
}

对象创建

  1. 您正在创建汽车实例 ( new car())
  2. 向变量 c 添加新对象指针
  3. 将变量 c 的内容复制到变量 vehicle(指向 car 对象)

方法调用流程

当您在对象上调用静态函数时,它不会应用继承规则,因此在调用 v.getModelName() Java 虚拟机调用方法时 class 车辆。

但是,当您使用 class 的车辆指针(v 变量)getRegNo 方法调用 car() 对象时,车辆将调用,并且当您使用 [=33 的汽车指针(c 变量)getRegNo 方法时=] 车辆会呼叫。

编辑建议表评论:

这种叫做“多态”的能力:here你可以找到很好的教程。 “多态”绝对是与“继承”、“封装”同等重要的概念