-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

このルールをよく覚えておいてください..........

と一緒に使用される場合、そのための最も具体的なバージョンが呼び出されます。methodclassMethod OverRiddinginheritance

例えば:

MarylandクラスにはprintMe() Readit」を出力するメソッドがあります。

StateクラスにはprintMe() Shipit」を出力するメソッドがあります。

Method Overriddingこれで、、、inheritanceおよびClass Polymorphism.

State md = new Maryland();

StateクラスのスーパークラスMarylandので、このようになります。

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

そして、コンパイラの典型的な動作は、メソッドがオブジェクト参照変数クラスに存在する場合にのみ呼び出され、メソッドがスーパークラスに存在しない限り、メソッドがスーパークラスに存在しない限り、そのメソッドについて何も知りません。そのサブクラスで....

だから私たちがこれをするとき...

md.printMe();

次に、「そのクラスのメソッドの最も具体的なバージョンが呼び出される」というルールに従って、printMe()メリーランドクラスのメソッドが呼び出されるため、「Readit」と出力されます。

于 2012-08-29T17:49:19.727 に答える
0

動的ポリモーフィズムと継承に関する知識が必要です。プログラムに複雑さはありません。プログラムをデバッグモードで実行し、実行を1行ずつ確認します。あなたは流れを理解するでしょう。

于 2012-08-29T17:45:02.410 に答える