2017-02-12 3 views
-2

は、私は次のような方法があるとし。「オブジェクト」タイプとしてメソッドの引数を持つ

ここで、abhayの内部にあるaのクラスタイプ(コンパイル時のオブジェクトタイプ)はどのようになりますか?言い換えれば、コンパイラの目の中でaのクラスになるのは、内部メソッドabhay

また、上記と異なる点は?

(我々は唯一のabhayの定義を変更することを与えられた): - 。代わりに、オブジェクトの

public static void abhay(Kaal a){ 
.... 
} 

「Javaは常に 『の値によってコール』、オブジェクトへの参照のみが、渡され引数として、この参照がどこにあるかを示す値です。

上記の事実がこの質問に対する回答と関連性がある場合は、上記の事実を踏まえて説明してください。

+0

'」のObjectを取る理由を見ていけない...と私はどこかにこのようにそれを使用instanceofKaal他の賢明であるかどうかを確認する必要があります - 。.. 。 " - それはコンパイルされません –

+2

あなたが投稿したコードはコンパイルされず、特にあなたに答えるのが難しくなります。あなたの質問がひどくはっきりしないので、すでに難しいです。しかし、 'Kaal'で宣言されているメソッドのどれかを使用しようとすると、最初のケースの' a'のコンパイル時の型は 'Object'です。 –

+1

これはオブジェクトです。 –

答えて

0

答えは簡単です。以下のメソッドシグネチャを考える:

public static void abhay(Object a) 

を、あなたはabhay(new Kaal());

ことによってそれを呼び出すことは言ってようなものです:

Object a = new Kaal(); //only able to access members of Object 

あなたがオブジェクトとしてそれを処理するためにJavaを告げたので、それが扱われますオブジェクトとして。 Kaalのメンバーにアクセスするには:

((Kaal)a).kaalMethod(); 

これは、パラメータリストで与えられたデータ型に準拠するJavaだけの問題です。それは "価値渡し"とは何の関係もありません。さらに、KaalとObjectの両方のインスタンスがオブジェクトです。値がプリミティブの実際の内容を参照しているプリミティブを扱っていません。

4

コンパイラそれが現在であるメソッドのシグネチャについてのみ心配。

それは知ることができず、そのメソッドが呼び出されるかを気にしません。

したがって、abhay()aをオブジェクトと宣言しているとコンパイラに認識されます。それはコンパイラがaについて知っているものです。

もちろん、実行時にb instanceof Kaalのようなコールはtrueになります。

ちょうど記録のために:これはがありませんは、値での呼び出しまたは参照による呼び出しに関係します。

0

パラメータとしてKaalを取り、あなたがパラメータとしてObjectを取り、Kaalクラスを渡し、そしてあなたがKaalメソッドやフィールド

public static void abhay(Object a){ 
    a.getSomeKaalMethod(); // doesnt work 
    .... 
} 
にアクセスすることはできません Kaal方法

public static void abhay(Kaal a){ 
    a.getSomeKaalMethod(); // works 
    .... 
} 

にアクセスすることができます

オブジェクトをキャストしない限り、Kaal

public static void abhay(Object a){ 
    Kaal k = (Kaal)a; 
    k.getSomeKaalMethod(); // works 
    .... 
} 

あなたは私があなたの代わりにクラス

public static void abhay(Object a){ 
    if(a instanceof Kaal){ 
     Kaal k = (Kaal)a; 
     k.getSomeKaalMethod(); // works 
    } 
} 
関連する問題