2010-11-23 85 views
2

我正在學習java,並且有關於對象類型的問題。關於對象類型的問題

採取以下爲例:

class A { } 

class B extends A { } 

class C {A myObject = new B();} 

什麼是描述myObject的類型的接受的方式?

你會說它是A型,B型還是A型和B型?

謝謝。

+0

你試過嗎?你會得到什麼輸出? – 2010-11-23 12:16:03

回答

6

myObjectA類型的參考(您的變量聲明爲A類型)。

對象本身,由myObject引用,是B類型。該實例的類型爲B

這是一個背景和焦點問題。 當您在其他地方使用myObject時,您可能不知道它是B類的實例,只是它的類型爲A

+0

該對象不是「存儲在內部」,而是「引用」引用。 – 2010-11-23 12:23:30

+0

正確。糾正。 – Kissaki 2010-11-23 12:42:32

1

它屬於A類型,因爲類型意味着您可以使用它的操作,但它是B的一個實例,所以您所做的所有操作都將以B方式進行。

1

myObject是場與所聲明的編譯時類型A.在運行時,它指的類型B的對象

聲明之間的區別(或編譯時)的變量和運行時類型對象的類型對於理解多態如何在像Java這樣的靜態類型語言中起作用至關重要。有些東西(如調用overriden方法)由運行時類型決定,其他類型(如調用重載或靜態方法)由編譯時類型決定。

一般來說:聲明的類型決定了你可以用對象做什麼,而運行時類型決定了它的行爲。

0

繼承意味着「是」關係 - 子類的實例是超類的實例。在你的例子中,因爲B擴展了A,所以B的一個實例也是A的一個實例 - 這就是爲什麼你可以在不投射的情況下爲一個A類型的變量分配一個新的B.

變量myObject是A型的,但它指的是一個對象,它是真正的B型