2

クラス A とクラス B があるとします。クラス B はクラス A を拡張します。クラス A には 1 つのメソッドがあります。

public class notimportant
 {
    public void one()
    {
    }
 }

public class A extends notimportant
{
    public void one()
    { 
        //assume there is a super class making this call legal which doesnt do anything
        super.one();
        System.out.println("blah");
    } 
}

public class B extends A
{
}

var1 = 新しい B();

「var1.one();」を呼び出すと 出力は次のようになります:

「何とか」「何とか」

クラスBで「one()」のローカルコピーを作成し、クラスAのメソッド「one()」につながる「super()」を呼び出すものを読み取るか、または単に印刷するためです

「ああ」

クラスAを直接見ることを知っているからです

編集:今はもっと明確になっていることを願っています。

4

2 に答える 2

1

それはあなたが現在書いている方法に従います:

-> クラスの新しいオブジェクトB

One->このオブジェクトのメソッドを呼び出す

-> 最初の行でスーパーメソッドを呼び出し、実行に進みます

- >その後、2行目が出力されます

ただし、コードはまったくコンパイルされません。それをクリアしたい場合があります。これを自分でテストするのを妨げているのは何ですか?

あなたが説明したように、これが新しい状況です。レイヤーを追加するだけで、すべてが期待どおりに機能します。

public class C {
    public void test() {
        System.out.println("Inside C");
    }
}

public class B extends C {
    public void test() {
        super.test();
        System.out.println("Inside B");
    }
}

public class A extends B {
    public static void main(String[] args) {
        A obj = new A();
        obj.test();
    }
}

出力:

Inside C
Inside B
于 2013-08-21T20:18:40.973 に答える