【问题标题】:Understanding execution flow of this Java programme [duplicate]了解这个Java程序的执行流程[重复]
【发布时间】:2017-01-12 04:48:45
【问题描述】:

我是学习 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;
    }
}

【问题讨论】:

  • 类,接口名称应始终以大写字母开头。
  • 在您的示例中,汽车“是一种车辆”。因此,“汽车”可以随心所欲地使用“车辆”的行为——或者可以随心所欲地改变。例如,“car”可以更改(“override”)getRegNo()。谷歌polymorphism
  • 你得到了什么输出,你期望什么输出?
  • 你不应该在实例上调用static 方法;你应该通过类名来调用它们。编译器还会警告您不要这样做。另请注意,static 方法不会被继承。
  • 准确来说static方法也是继承的,但是不能被子类覆盖;它们只能隐藏(但这在这里有点无关紧要)。在这里要学习的一个很好的教训是,您不应该禁用编译器警告。

标签: java class object inheritance instances


【解决方案1】:

对象创建

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

方法调用流程

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

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

编辑建议表评论:

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

【讨论】:

  • 感谢您的时间,努力和清晰的解释。好像现在我已经理解了静态成员的概念和关于继承的新事物......非常感谢您
  • 很高兴你喜欢 :)
  • “someClass.getRegNo()”做一件事的能力,以及不同的“someOtherClass.getRegNo()”做其他事情的能力,称为"Polymorphism":docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html。 “多态性”绝对是和"inheritance""encapsulation' 一样重要的概念
  • @paulsm4 谢谢,我在回答中添加了您的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多