了解此Java程序的执行流程

时间:2016-09-04 18:11:59

标签: java class object inheritance instances

我是学习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 个答案:

答案 0 :(得分:3)

对象创建

  1. 您正在创建汽车实例(新车())
  2. 将新对象指针添加到变量c
  3. 将变量c的内容复制到可变车辆(指向车辆对象)
  4. 方法调用流程

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

    但是当你用汽车指针(v变量)调用car()对象时,类车辆的getRegNo方法会调用,当你使用汽车指针(c变量)时,类车辆的getRegNo方法也会调用。

    edite建议表评论:

    这种称为" Polymorphism":here的能力你可以找到很好的教程。 "多态性"绝对是一个重要的概念,如继承"和"封装'。