我見過很多關於對象引用的問題,並且部分理解了它們的工作原理。儘管如此,我仍然有一些疑慮。將一個對象的引用賦值給Java中的其他對象?
首先,本聲明中的所有詞語意味着什麼?
Box b = new Box();
我知道new Box()
導致創建一個對象,並返回參照到對象。如果我沒有錯,這個參考被存儲在b
中。那麼最初的Box
是什麼?根據我讀過的內容,這是定義Box的類。雖然我不確定。這使我想到我的下一個問題。
我試圖瞭解初始期限在聲明中表示,以我嘗試了這一點:
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」類型的任何引用,並且包含任何子類型。 –
「那麼最初的」Box「是什麼? Java是一種靜態和強類型的語言。這意味着:每個變量都有一個在編譯時已知的類型,您只能將該類型的值(或子類型,即子類)賦值給此變量。 'Box b'說:「我想要一個名爲'b'的變量,它的(靜態)類型是'Box''。然而,在運行時,'b'引用的對象可以是「Box」或「Box」的任何子類(例如,在您的示例中爲「Cup」)。 – Turing85
@ Turing85你的評論應該是一個答案 –