我一直在研究Java中的繼承,並且作者聲明「它是被引用的對象的類型(而不是引用變量的類型),它決定了將要執行的重寫方法的版本。」 這個陳述非常混亂。Java中的引用變量究竟是什麼?它與其他變量有什麼不同?
回答
本書指的是多態性,更具體地說是通過動態調度。
簡而言之,可以想象以下類:
public class Person {
public Person() {
}
public void introduceYourself() {
}
}
public class Texan extends Person {
public Texan() {
}
public void introduceYourself() {
System.out.printLn("Howdy y'all!");
}
}
public class NewYorker extends Person {
public NewYorker() {
}
public void introduceYourself() {
System.out.printLn("Yo. You got a problem with that?");
}
}
現在,讓我們創建Person
類型的引用變量。
Person myBFF;
讓他實例
myBFF = new NewYorker();
讓我們叫他自己介紹
myBFF.introduceYourself();
此打印:
呦。你對此有看法?
現在,讓我們把你的BFF換成德克薩斯人。
myBFF = new Texan();
讓我們再次調用同一行,並要求我們的BFF自我介紹。
myBFF.introduceYourself();
此打印:
你好你們!
在每種情況下,您使用的參考變量的類型爲人。變量的實例分別是NewYorker和德克薩斯州。 即實例類型決定了哪個版本的引入了自己()被調用。
引用變量是您在左側指定的類型(保存引用類型的變量)。作者所指的是當右手邊不同時。考慮
Object a = new Foo();
System.out.println(a.toString());
如果Foo
覆蓋Object.toString()
(即,如果Foo
提供public String toString()
)方法然後它是Foo
的toString
被調用(不Object
的)。另請參閱Java教程中的Overriding and Hiding Methods。
感謝的人。我想我知道了 – user8865657
的參考變量是這樣的:
Coordinate cords; //Cords is the ref. var
裏面的是參考變量是存儲該對象的屬性,您的計算機的RAM內的地址。由於我們沒有實例化(實際上是一個對象)上述線對象的地址是null
引用變量將地址保存到內存的保留部分。
cords = new Coordinate(0.0,0.0,0.0);
現在計算機的RAM內部是一個保留三個浮點型變量的保留空間。實例化時,引用變量保存地址。那麼我們可以用Java中的地址做些什麼?
沒有用處。 Java的內存地址是沒用的,你無法看到它們(雖然他們看起來像0xFFFFFFF可)
有關視覺表現單擊here
- 1. VHDL中的變量究竟是什麼?
- 2. Shopify的product.price變量究竟是什麼?
- 3. 變量模板究竟是什麼
- 4. C++變量別名 - 究竟是什麼,爲什麼關閉它會更好?
- 5. OSX下的JAVA_HOME變量......究竟是什麼?
- 6. 究竟是什麼ObjectFactory是什麼,它用於什麼?
- 7. 究竟是什麼觸發ng變化?
- 8. Mercurial變更集究竟是什麼?
- 9. 不會替換值的變量。我究竟做錯了什麼?
- 10. 「經常性」PayPal IPN變量究竟是什麼?
- 11. 核心文件究竟是什麼,它爲什麼有用?
- 12. Android Bootstrap究竟是什麼,它有什麼作用?
- 13. JQuery地圖:究竟是什麼?它有什麼作用?
- 14. 爲什麼未定義的行爲與其他變量不同?
- 15. Android Java中的EventType究竟是什麼?
- 16. PHP - 什麼是常量,它們是不錯的練習,它們與變量有什麼不同?
- 17. Ajax請求究竟是什麼?它與Servlet請求不同嗎?
- 18. 張量:它是什麼,它與載體有什麼不同?
- 19. 爲什麼有些變量是參數而其他變量不是?
- 20. 什麼是Eclipse的構建變量,它們與環境變量有什麼不同?
- 21. 與DBMS中的索引有關的「固定」究竟是什麼?
- 22. 當你在C中引用靜態變量時究竟發生了什麼?
- 23. 術語「共享變量」是什麼意思?它與「全局變量」有什麼不同?
- 24. GCHandle.Alloc(Object)的合同究竟是什麼?
- 25. 谷歌瀏覽器範圍變量究竟意味着什麼?
- 26. 改變TFS構建質量究竟做了什麼?
- 27. 究竟是什麼耙db:migrate做什麼?
- 28. 「git update-index -g」究竟是什麼,沒有其他選擇呢?
- 29. 模板引擎究竟是什麼?
- 30. fetchAllIfNeeded究竟與JS SDK中的fetchAll有什麼不同?
你有一個真正的解釋訣竅!非常感謝,但我確實有一個問題;無論多少代子類都是類型超類的總是引用變量?例如。如果我將德克薩斯州延長到SouthernTexan,該參考變量是否仍然是Person類型? – user8865657
是的,但是你可以聲明一個引用變量爲更接近實例類型的類型。例如,你可以做'Texan bob = new SouthernTexan();'或'SouthernTexan sue = new SouthernTexan();',但是你不能*做'NewYorker clyde = new SouthernTexan();',你也不能'SouthernTexan henry =新人();'。 –