继承java解释

时间:2012-08-29 17:26:26

标签: java inheritance

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

3 个答案:

答案 0 :(得分:4)

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

Read it.
Ship it.
Buy it.
Read it.
Box it.
Read it.

答案 1 :(得分:2)

记住这个规则..........

methodclass一起使用时,将调用Method OverRidding inheritance最具体版本

<强>例如

Maryland班级有printMe()方法打印“读取它”。

State班级有printMe()方法打印“发货”。

现在它是Method Overridding以及inheritanceClass Polymorphism.

的示例
State md = new Maryland();

StateMaryland类的超类,所以就像这样..

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

它是Compiler的一个典型行为,只有当对象引用变量类中存在该方法然后只有它被调用时才会导致,除非该方法存在于超类中,否则它将不知道任何关于它的信息。即使它在它的子类....

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

md.printMe();

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

答案 2 :(得分:0)

需要有关动态多态和继承的知识。程序没有复杂性。 在调试模式下执行程序并逐行检查执行。你会理解这个流程。