天天操操-你懂的在线观看-欧美成人激情-午夜激情视频在线观看-性生活影视-亚洲国产精品久久久

為什么Java中類的成員變量不能被重寫?

這篇文章討論了Java面向?qū)ο蟾拍钪幸粋基本的概念--Field Hiding(成員變量隱藏)

成員變量在Java中能夠被重寫么?
Let’s first take a look at the following example which creates two Sub objects. One is
assigned to a Sub reference, the other is assigned to a Super reference.
我們看下面這個例子,我們創(chuàng)建了兩個子對象,一個使用的是子對象的引用,一個使用的是父對象的引用。

public class FieldOverriding {
 
    public static void main(String[] args) {
        Sub c1 = new Sub();
        Super c2 = new Sub();
        System.out.println(c1.s);
        System.out.println(c2.s);
 
    }
 
}
 
class Super {
    String s = "Super";
}
 
class Sub extends Super {
    String s = "Sub";
}
程序的輸出結(jié)果是:


Paste_Image.png
按照我們已有的多態(tài)的概念,第二個應(yīng)該是輸出sub才對,但卻輸出了super。這是為什么呢?

不會重寫成員變量,而是隱藏成員變量
Java文檔中對隱藏域的定義:

Within a class, a field that has the same name as a field in the superclass hides the superclass’s field, even if their types are different. Within the subclass, the field in the superclass cannot be referenced by its simple name. Instead, the field must be accessed through super. Generally speaking, we don’t recommend hiding fields as it makes code difficult to read.

意思就是:

在一個類中,子類中的成員變量如果和父類中的成員變量同名,那么即使他們類型不一樣,只要名字一樣。父類中的成員變量都會被隱藏。在子類中,父類的成員變量不能被簡單的用引用來訪問。而是,必須從父類的引用獲得父類被隱藏的成員變量,一般來說,我們不推薦隱藏成員變量,因為這樣會使代碼變得難以閱讀。

其實,簡單來說,就是子類不會去重寫覆蓋父類的成員變量,所以成員變量的訪問不能像方法一樣使用多態(tài)去訪問。

訪問隱藏域的方法
就是使用父類的引用類型,那么就可以訪問到隱藏域,就像我們例子中的代碼

就是使用類型轉(zhuǎn)換System.out.println(((Super)c1).s);

北大青鳥網(wǎng)上報名
北大青鳥招生簡章
主站蜘蛛池模板: 国产成人黄网址在线视频 | 欧美三级网站在线观看 | 亚洲性视频在线 | 亚洲欧美视频网站 | dvd8090cnm欧美大片 | 日韩精品首页 | 久久丁香| se94se最新网站| 手机亚洲第1页 | 2022国内精品免费福利视频 | 免费观看欧美一级牲片一 | 久久欧美精品欧美九久欧美 | 三级黄色免费网站 | 手机在线观看一级午夜片 | 日韩成人一级 | 亚洲日本一区二区三区 | 久久久久久久国产精品视频 | 国产欧美网站 | 好吊妞998视频免费观看在线 | 久久精品国产欧美成人 | 成人自拍视频 | 国内视频一区 | 天堂8中文在线最新版在线 天堂8资源8在线 | 国产精品三级国语在线看 | 欧美真人视频一级毛片 | 男女一级 | 一级不卡毛片免费 | 亚洲视频在线免费 | 免费国产成人午夜在线观看 | 国产精品热久久毛片 | 大焦伊人 | 欧美一级特毛片 | 一级a性色生活片久久毛片 一级a做爰片欧欧美毛片4 | 免费在线看a | 久久精品免费播放 | 欧美很黄视频在线观看 | 日韩久久一级毛片 | 亚洲免费视频一区 | 国产99精品免费视频看6 | 99在线免费观看视频 | 六月丁香婷婷色狠狠久久 |