日韩不卡免费视频-日韩不卡视频在线-日韩不卡视频在线观看-日韩不卡一二三区-伊人二区-伊人丁香花久久爱综合

為什么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);

北大青鳥網上報名
北大青鳥招生簡章
主站蜘蛛池模板: 国产高清精品在线 | 中文字幕 亚洲一区 | 国产精品亚洲精品日韩已满 | 久久久久久一级毛片免费野外 | 日韩一区二区三区四区 | 扒开双腿猛进入喷水免费视频 | 亚洲第一激情 | 欧美另类久久久精品 | 日韩一品在线播放视频一品免费 | 日韩三级黄色片 | 国产精品色内内在线播放 | 成人午夜视频在线播放 | 欧美韩国日本一区 | 亚洲国产欧美目韩成人综合 | 日本b站一卡二卡乱码入口 日本s色大片在线观看 | 亚洲成人中文字幕 | 全部孕妇毛片 | 欧美精品一区二区精品久久 | 国产欧美日韩视频在线观看一区二区 | 美女张开双腿让男人桶视频免费 | 91精品成人福利在线播放 | 精品国产免费一区二区三区五区 | 亚洲国产成人最新精品资源 | 欧美午夜性春猛交 | tom影院亚洲国产日本一区 | 国产在线观看成人免费视频 | 亚洲精品aaa | 日韩黄色一级片 | 亚洲国产综合久久精品 | 美女张开腿黄网站免费 | 我看毛片| 狠狠88综合久久久久综合网 | 久久精品视频99精品视频150 | 午夜手机看片 | 手机看片精品高清国产日韩 | 国产手机在线小视频免费观看 | 成人精品一区二区三区 | 毛片免费全部免费播放 | 亚洲在线精品视频 | 日韩二区三区 | 亚洲精品中文字幕一区 |