2016-06-16 20 views
-1

X z = new Y();は、コンパイル時にclass Xのインスタンスとしてzを処理しますが、実行時にはclass Yのインスタンスとして処理することを意味します。コンパイル時/ランタイムの追加

なぜ、z.method((byte)0 + (char)0);が実行時に処理されるのですか?これらの2つの定数は加算されないので、実行時ではなくコンパイル時に決定できますか?

class X { 
    void method(int x) { System.out.println("X:int"); } 
} 

class Y extends X { 
    void method(int x) { System.out.println("Y:int"); } 
} 

public class Z { 
    public static void main(String[] args) { 
     X x = new X(); 
     X z = new Y(); 

     System.out.println("1:"); 
     z.method((byte)0 + (char)0); 
    } 
} 

出力:追加が関連しているどのように私は見ていない

1: 
Y:int 
+0

初心者向けのヒント:以前の研究を行うことが期待されています。特にあなたがここで新しい/ javaになったとき:あなたはこの質問をする最初の人ではない可能性が非常に高いです。だから、良い質問を書くために15分を費やす前に、この質問が以前に尋ねられたかどうかを確認するのにちょうど数分を費やしました。 – GhostCat

+0

私は知っていますが、どのようにすべての該当する用語を知っていると思いますか? – LifeisHard

+0

私は改訂履歴にそれ以上のことを示すのではなく、他の人にはわかりません。元の質問は、オーバーロードされたメソッドに 'null 'を渡すことでした。 –

答えて

1

。あなたは、パラメータとしてintを取るXのadd()メソッドを持っています。このメソッドは、Yのzでオーバーライドされます。具体的な型がYであるオブジェクトを参照するため、Yのオーバーライドメソッドが呼び出されます。それは単なる古くからの多型です。

+0

それはそれですが、最後の文は必要ありませんでした。 – LifeisHard

関連する問題