国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

java - 多態(tài)調(diào)用同名成員變量,為何訪問的是父類的成員變量?

瀏覽:121日期:2023-11-05 08:41:57

問題描述

剛開始猜測(cè),由于父類和子類的成員變量在堆中各存一份,可能是父類的存在上面,因此先找到的父類的成員變量。然后測(cè)試了一下,代碼如下:

package test;public class Polymorphism { public static void main(String[] args) {F f = new Z();f.show();System.out.println('f:'+f);System.out.println('f:'+f.a); }}abstract class F{ int a = 10; public abstract void show();}class Z extends F{ int a = 5; public void show(){System.out.println('Z:'+this);System.out.println('Z:'+this.a); }}

輸出為:Z:test.Z@15db9742Z:5f:test.Z@15db9742f:10

f與this指向同一個(gè)對(duì)象訪問同一個(gè)變量結(jié)果卻不同,所以我上邊的猜測(cè)應(yīng)該是錯(cuò)的。那究竟是什么原因?qū)е露鄳B(tài)調(diào)用同名成員變量,訪問的是父類的成員變量這種情況?

問題解答

回答1:

java - 多態(tài)調(diào)用同名成員變量,為何訪問的是父類的成員變量?

f指的是子類對(duì)象。只聽過方法的重寫和重載,沒有類變量的重寫和重載吧,我運(yùn)行的程序,它分情況了,如果是調(diào)用方法,就是實(shí)際所指的對(duì)象(這里實(shí)際對(duì)象是子類對(duì)象Z)的方法,如果是類變量同名了,就是生命對(duì)象的類變量值。

回答2:

java中方法的重寫,重載與動(dòng)態(tài)鏈接構(gòu)成多態(tài),多態(tài)就是同一個(gè)事物的不同表現(xiàn)形式。

你這個(gè)例子是方法的重寫表現(xiàn)出來的多態(tài)性。

聲明的是父類F,實(shí)際上指向他的子類Z,這個(gè)時(shí)候是相當(dāng)于一個(gè)向上類型轉(zhuǎn)換,因?yàn)閆也是由F繼承過來的,所以可以向上轉(zhuǎn)型,現(xiàn)在Z是F類型的。

所以這里f變量由Z實(shí)例化出來的,但是它是F類型的,表現(xiàn)出來的是F的特性。

標(biāo)簽: java
主站蜘蛛池模板: 萍乡市| 景泰县| 德保县| 晋宁县| 渑池县| 巴林左旗| 利川市| 高雄县| 祁东县| 彰武县| 沾化县| 镶黄旗| 云霄县| 左贡县| 陕西省| 二连浩特市| 剑川县| 中山市| 惠东县| 常州市| 农安县| 汾阳市| 乌兰察布市| 旬邑县| 岳普湖县| 峨眉山市| 绵竹市| 额济纳旗| 香格里拉县| 饶阳县| 延寿县| 射洪县| 新建县| 奉新县| 垫江县| 奉新县| 新河县| 丘北县| 广州市| 阳新县| 霍州市|