私はオブジェクトへの参照について多くの疑問を抱いており、それらの動作の仕方は部分的に理解しています。私はまだ彼らにいくつかの疑問を持っています。あるオブジェクトの参照をJavaの他のオブジェクトに割り当てるか?
まず、このステートメントのすべての単語は何を意味していますか?
Box b = new Box();
私はnew Box()
は、オブジェクトが作成されますと、オブジェクトへの参照が返されることを知っています。私が間違っていない場合、この参照はb
に格納されます。だから、最初のBox
は何ですか?私が読んだことによると、Boxを定義するクラスです。私は確信していません。それは私の次の質問に私をもたらします。私は最初の項はIに声明の中で意味を理解しようとした
はこれを試してみた:
class LOL
{
public static void main(String args[])
{
Box b=new Box();
Cup c=new Cup();
Box f=new Cup(); //*****
f.daa(); //Prints Box.daa
f.display(); //Prints Cup.display
f.disp(); //ERROR!
}
}
class Box
{
void display()
{
System.out.println("Box.display");
}
void daa()
{
System.out.println("Box.daa");
}
}
class Cup extends Box
{
void display()
{
System.out.println("Cup.display");
}
void disp()
{
System.out.println("Cup.disp");
}
}
は何がここで起こっていますか? *****は実際に何をしていますか?作成されたオブジェクトのタイプはCup
(私はそうだと思います)だから、なぜf.disp()
に電話できないのですか?これの周りに私の頭を包むことはできません。
'Box f = ...'では、 'Box'は変数' f'の型です。つまり、Box型のものへの参照を格納することができ、それにはすべてのサブタイプが含まれます。 –
"最初のボックスは何ですか? Javaは静的で強く型付けされた言語です。これは、すべての変数がコンパイル時に知られている型を持ち、その型(またはサブタイプ、つまりサブクラス)の値をこの変数にアサートできることを意味します。 'Box b'は「bという名前の変数を持っていて、その(静的な)型はBoxです」と言っています。しかし、実行時には、 'b'によって参照されるオブジェクトは' Box'または 'Box'のサブクラス(例えばあなたの例では' Cup')のいずれかになります。 – Turing85
@ Turing85あなたのコメントは答えになるはずです –