有人可以解释一下这个程序的执行情况吗?
我知道extends
关键字的作用。但我仍然无法弄清楚结果会是什么?为什么?
public class Maryland extends State {
Maryland() { /* null constructor */ }
public void printMe() { System.out.println("Read it."); }
public static void main(String[] args) {
Region mid = new State();
State md = new Maryland();
Object obj = new Place();
Place usa = new Region();
md.printMe();
mid.printMe();
((Place) obj).printMe();
obj = md;
((Maryland) obj).printMe();
obj = usa;
((Place) obj).printMe();
usa = md;
((Place) usa).printMe();
}
}
class State extends Region {
State() { /* null constructor */ }
public void printMe() { System.out.println("Ship it."); }
}
class Region extends Place {
Region() { /* null constructor */ }
public void printMe() { System.out.println("Box it."); }
}
class Place extends Object {
Place() { /* null constructor */ }
public void printMe() { System.out.println("Buy it."); }
}
答案 0 :(得分:4)
运行它,你会看到结果。你还需要什么?
Read it.
Ship it.
Buy it.
Read it.
Box it.
Read it.
答案 1 :(得分:2)
记住这个规则..........
当method
与class
一起使用时,将调用Method OverRidding
inheritance
的最具体版本。
<强>例如强>
Maryland
班级有printMe()
方法打印“读取它”。
State
班级有printMe()
方法打印“发货”。
现在它是Method Overridding
以及inheritance
和Class Polymorphism.
State md = new Maryland();
State
是Maryland
类的超类,所以就像这样..
Object Reference Variable of Super class md = Object of Subclass ;
它是Compiler的一个典型行为,只有当对象引用变量类中存在该方法然后只有它被调用时才会导致,除非该方法存在于超类中,否则它将不知道任何关于它的信息。即使它在它的子类....
所以当我们这样做时......
md.printMe();
然后根据“将调用该类的方法的最具体版本”的规则,将调用Maryland类的printMe()
方法,因此它打印读取它。
答案 2 :(得分:0)
需要有关动态多态和继承的知识。程序没有复杂性。 在调试模式下执行程序并逐行检查执行。你会理解这个流程。