【发布时间】: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