亚洲天堂一级片-亚洲天堂三区-亚洲天堂久久精品成人-亚洲天堂毛片-久久国产欧美日韩高清专区-久久国产欧美日韩精品免费

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

這篇文章討論了Java面向對象概念中一個基本的概念--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.
我們看下面這個例子,我們創建了兩個子對象,一個使用的是子對象的引用,一個使用的是父對象的引用。

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";
}
程序的輸出結果是:


Paste_Image.png
按照我們已有的多態的概念,第二個應該是輸出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.

意思就是:

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

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

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

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

北大青鳥網上報名
北大青鳥招生簡章
主站蜘蛛池模板: 曰韩一级毛片 | 亚洲高清在线播放 | 免费一级毛片女人图片 | 免费观看性欧美毛片 | av片免费大全在线观看不卡 | 色悠久久久久综合网伊人男男 | 久久久91精品国产一区二区 | 日韩三级视频在线 | 亚洲爱爱爱 | 亚洲视频区 | 亚洲精品久久久久久久网站 | 国产亚洲人成网站观看 | 手机看片1024久久精品你懂的 | 久久国产精品歌舞团 | 国产成人午夜性a一级毛片 国产成人午夜性视频影院 国产成人香蕉久久久久 | 国美女福利视频午夜精品 | 色偷偷亚洲精品一区 | 六月成人网 | 国产在线播放一区二区 | 亚洲专区在线视频 | 成人a免费α片在线视频网站 | 手机在线国产精品 | 91探花福利精品国产自产在线 | 欧美日本在线视频 | 国产午夜伦伦伦午夜伦 | 精品国产理论在线观看不卡 | 免费国产综合视频在线看 | 欧美视频在线观看免费精品欧美视频 | 久久国产亚洲精品 | 在线观看日韩 | 国产成人午夜精品影院游乐网 | 欧美一级毛片不卡免费观看 | 手机看片1024精品日韩 | 日本欧美在线视频 | 亚洲天堂日韩在线 | 男女性生活网站 | 欧美成人艳星在线播放 | 成人做爰毛片免费视频 | 丁香婷婷影音先锋5566 | 欧美日韩综合精品一区二区三区 | 日韩免费精品一级毛片 |