-5

有人可以解释一下这个程序的执行吗?我知道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."); }
}
4

3 回答 3

4

运行它,你会看到结果。你还需要什么?

Read it.
Ship it.
Buy it.
Read it.
Box it.
Read it.
于 2012-08-29T17:32:05.607 回答
2

记住这条规则…………

method. _ class_ Method OverRidding_ inheritance_

例如:

Maryland类具有printMe()打印“阅读它”的方法。

State类具有printMe()打印“Ship it”的方法。

现在它是一个例子Method OverriddingwithinheritanceClass Polymorphism.

State md = new Maryland();

State是类的超Maryland,所以它是这样的..

Object Reference Variable of Super class  md  =  Object of Subclass ;

并且它是编译器的典型行为,只有当方法存在于对象引用变量类中时,才会调用它,导致直到并且除非该方法存在于超类中,它不会知道任何关于它的信息,即使它在它的子类中......

所以当我们这样做时......

md.printMe();

然后根据“将调用该类方法的最具体版本”的规则,将调用printMe()Maryland 类的方法,因此它会打印Read it。

于 2012-08-29T17:49:19.727 回答
0

需要有关动态多态性和继承的知识。程序没有复杂性。在调试模式下执行程序,并逐行检查执行情况。您将了解流程。

于 2012-08-29T17:45:02.410 回答