本文目錄一覽:
- 1、java繼承中關於屬性的覆蓋問題,繼承中是否存在屬性的覆蓋?
- 2、Java中屬性的隱藏與方法的覆蓋的區別
- 3、Java 父類A有屬性B b,子類A1有屬性B1 b,B1是B的子類。那麼A1的b屬性覆蓋了父類的屬性嗎?
- 4、請教個問題,Java中屬性的隱藏與方法的覆蓋,求詳解.
java繼承中關於屬性的覆蓋問題,繼承中是否存在屬性的覆蓋?
屬性是不會覆蓋的哦。。。
父類的屬性是父類的。。。子類的屬性是子類的。。。
方法是可以被覆蓋的。。。
希望能幫到你。。。。
Java中屬性的隱藏與方法的覆蓋的區別
我明白你想問的意思。我先這樣回答下,看你的基礎夠不夠看懂,如果不懂就再問,email我也行。
在C++中,數據成員(屬性)可以隱藏,函數成員(方法)既可以隱藏也可以覆蓋(通過關鍵字virtual)。
在Java中,動態編聯始終是打開的(相當於始終有一個virtual在方法前面)。所以Java中的方法沒辦法隱藏,只能覆蓋。
可以對比一下C#,它通過一套關鍵字virtual、new、override,實現了既能隱藏方法,又能覆蓋方法。
Java 父類A有屬性B b,子類A1有屬性B1 b,B1是B的子類。那麼A1的b屬性覆蓋了父類的屬性嗎?
不會覆蓋的
A1中的b變數是局部變數,好比這是兩個家庭,恰好有一個孩子名字相同,但本質上是兩個不同的變數。
所以對A1中的b操作不會對父類A中的b屬性有任何影響
請教個問題,Java中屬性的隱藏與方法的覆蓋,求詳解.
首先要知道這幾點
1.只有注入到內存的屬性和方法,才能被使用.(這是本類的,如果是其他類,還得考慮安全級別,如:public protected private等)
2.靜態方法和靜態屬性 不依賴於 對象的創建(new) 即:在對象創建之前,只要應用程序啟動,就注入內存.
你可以直接調用,如:可以直接使用Animal.A Animal.method(),而且:
a.A == Animal.A
a.method() == Animal.method()
3.非靜態程序塊, 即 成員變數,成員方法, 要依賴於 對象的創建,只有 創建了這個的對象,才給這個對象分配內存,注入內存,你才能使用它
4.Animal a = new Cat(); 即: 父類 對象 = new 子類
左邊的是句柄, 指向的是子類的對象,由於你創建的是子類的對象,而且子類也覆蓋了父類的方法和屬性(非靜態),所以
a.voice(); 所以執行的是子類的方法.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/294145.html