我正在學習java,並且有關於對象類型的問題。關於對象類型的問題
採取以下爲例:
class A { }
class B extends A { }
class C {A myObject = new B();}
什麼是描述myObject的類型的接受的方式?
你會說它是A型,B型還是A型和B型?
謝謝。
我正在學習java,並且有關於對象類型的問題。關於對象類型的問題
採取以下爲例:
class A { }
class B extends A { }
class C {A myObject = new B();}
什麼是描述myObject的類型的接受的方式?
你會說它是A型,B型還是A型和B型?
謝謝。
myObject
是A
類型的參考(您的變量聲明爲A
類型)。
對象本身,由myObject
引用,是B
類型。該實例的類型爲B
。
這是一個背景和焦點問題。 當您在其他地方使用myObject
時,您可能不知道它是B
類的實例,只是它的類型爲A
。
該對象不是「存儲在內部」,而是「引用」引用。 – 2010-11-23 12:23:30
正確。糾正。 – Kissaki 2010-11-23 12:42:32
它屬於A類型,因爲類型意味着您可以使用它的操作,但它是B的一個實例,所以您所做的所有操作都將以B方式進行。
myObject
是場與所聲明的編譯時類型A.在運行時,它指的類型B的對象
聲明之間的區別(或編譯時)的變量和運行時類型對象的類型對於理解多態如何在像Java這樣的靜態類型語言中起作用至關重要。有些東西(如調用overriden方法)由運行時類型決定,其他類型(如調用重載或靜態方法)由編譯時類型決定。
一般來說:聲明的類型決定了你可以用對象做什麼,而運行時類型決定了它的行爲。
繼承意味着「是」關係 - 子類的實例是超類的實例。在你的例子中,因爲B擴展了A,所以B的一個實例也是A的一個實例 - 這就是爲什麼你可以在不投射的情況下爲一個A類型的變量分配一個新的B.
變量myObject
是A型的,但它指的是一個對象,它是真正的B型
你試過嗎?你會得到什麼輸出? – 2010-11-23 12:16:03