1. 程式人生 > >繼承體系中的同名隱藏

繼承體系中的同名隱藏

在繼承體系中,如果派生類中含有一個與基類同名的成員,那麼基類的同名成員將會被派生類的同名成員所覆蓋(即隱藏),想要訪問基類的同名成員就必須明確指定出基類的作用域。

那麼,為什麼是派生類的同成員覆蓋基類的同名成員,而不是基類的同名成員覆蓋派生類的同名成員?

  • 作用域

當存在繼承關係時,派生類的作用域巢狀在其基類的作用域之內。

即派生類的作用域位於基類作用域之內。

也是由於這樣派生類才能像使用自己的成員一樣使用基類成員

  • 編譯器的查詢規則

編譯器在派生類中查詢一個成員的過程是沿著繼承體系自底向上進行:首先在自己的作用域中查詢,如果沒有找到就去基類的作用域中查詢,如果還沒有找到,會在向上進行查詢。

因此,如果編譯器不明確指定作用域,直接在派生類中查詢一個成員變數的話,那麼在派生類自己的作用域找到了, 就不會在去基類的作用域中查找了。

這也就是為什麼派生類的同名成員會隱藏基類的同名成員,就是由於派生類的作用域位於基類的作用域之內且編譯器的查詢順序是自底向上查詢的方式,所導致的同名隱藏。

相關推薦

繼承體系同名隱藏

在繼承體系中,如果派生類中含有一個與基類同名的成員,那麼基類的同名成員將會被派生類的同名成員所覆蓋(即隱藏),想要訪問基類的同名成員就必須明確指定出基類的作用域。 那麼,為什麼是派生類的同成員覆蓋基類的同名成員,而不是基類的同名成員覆蓋派生類的同名成員?

C++繼承關系同名隱藏和對策

兩個 blog pub ++ 繼承 return har cout 返回值   在C++及其面向對象的理論中,有這樣的場景:一個類繼承自另外一個類,如果這兩個類都有一個函數名和參數及其返回值一樣的成員函數,那麽子類的函數會自動將父類對應的函數隱藏。即同名隱藏。在有時的開發過

springmvcDispatchservlet繼承體系詳解

springmvc中Dispatchservlet繼承體系詳解與原始碼分析 一、Dispatchservlet繼承體系 二、HttpServletBean 三、FrameworkServlet 四、DispatcherServlet

C++繼承同名隱藏

同名隱藏 定義:基類和派生類中具有相同名稱的成員(成員變數/成員函式), 派生類會自動遮蔽基類中此成員,而優先訪問派生類自己的成員,基類同名成員就被隱藏了。同名隱藏分為兩類:類成員隱藏和類成員函式隱藏。 類成員隱藏:派生類和基類中有同名成員變數,派生類成員將遮蔽基類對同名成員

linux服務器Apache隱藏index.php失敗

document mod write inux override director tee family height 可以通過URL重寫隱藏應用的入口文件index.php,下面是相關服務器的配置參考: 【Apache】 httpd.conf配置文件中加載了mod_re

FlexTabNavigator隱藏和顯示選項卡

pro ble 點擊 plain bat summer microsoft _id lai 1、問題背景 遇到這樣一個問題:有四個Tab選項卡。依據不同的參數隱藏和顯示選項卡 2、實現實例 (1)隱藏“春季” protected fun

Java:驗證在類繼承過程equals()、 hashcode()、toString()方法的使用

red ger 輸出 ria oid nag println manage base 以下通過實際例子對類創建過程匯中常用的equals()、hashcode()、toString()方法進行展示,三個方法的創建過程具有通用性,在項目中可直接改寫。 //通過超類Employ

CTF圖片隱藏文件分離方法總結

隱藏 leg 文件 使用 是否 信息 目錄 數據 key 前言 可以使用winhex之類的工具先行分析其是否為圖片,可以看其頭部信息,還有就是JPG圖片有一個特性最後的應用數據塊為FF E0 活著直接使用binwalk看看圖片下有什麽鬼玩意兒的。 binwalk分離

JavaScript工作體系不可或缺的函數

提高 log 體系 即使 其他 asc alt 計劃 href 一、函數的概念 日常生活中,我們要完成一件事,總是習慣先有一個計劃,後期按照計劃,一步一步執行,則能夠完成,並且達到一定效果實現一定的功能。在編程的世界裏,“功能”可稱呼為“函數”,因此“函數”即一段實現了某種

[py]python的繼承體系

ber get from cmd row pos turtle sysconf sort python的繼承體系 python中一切皆對象 隨著類的定義而開辟執行 class Foo(object): print 'Loading...'

MyEclipse如何隱藏關閉的項目?

eclipse 效果 關閉 eclips 分享圖片 clip 技術分享 com 操作 問題描述:   我們有很多已經關閉的項目,不想讓它顯示,該如何辦呢?如下圖所示:    操作步驟:       效果如下:   MyEclipse中如何隱藏關閉的項目?

集合的由來及集合繼承體系圖-學習筆記

內部 http blog 學習筆記 vpd pro sha 繼承體系 nag * A:集合的由來 * 數組長度是固定,當添加的元素超過了數組的長度時需要對數組重新定義,太麻煩,java內部給我們提供了集合類,能存儲任意對象,長度是可以改變的,隨著元素的增加而增加,隨著元素的

樹莓派linux系統顯示隱藏文件的幾種方法

模式 文件的 ctr style 方法 選項 可視化 終端 顯示 一、如果直接使用可視化文件管理器   1、直接點擊右鍵,直接選擇“顯示隱藏文件”選項。   2、快捷鍵 CTRL + H 二、在終端命令行模式下   可以使用ls命令的-a參數來顯示隱藏的文件及文件夾。

C++快速入門---繼承機制的構造器和析構器(11)

C++快速入門---繼承機制中的構造器和析構器(11)   比如基類有個構造器,如Animal(),它將在創造Pig型別的物件時最先被呼叫,如果Pig類也有一個構造器,它將排在第二個被呼叫。因為基類必須在子類之前初始化原則!(先有老爸,再有兒子) Animal::Animal(

組合而不是繼承 - Go的OOP

第27部分:組合而不是繼承 - Go中的OOP 2017年9月4日 歡迎來到教程號。27在Golang教程系列中。 Go不支援繼承,但它確實支援組合。組合的通用定義是“放在一起”。組合的一個例子是汽車。汽車由車輪,發動機和各種其他部件組成。 通過嵌入結構組成 Go中的組合可以通過

FloatingActionButton在RecycleView滑動隱藏顯示

FloatingActionButton是的Google在com.android.support:design庫中的一個懸浮按鈕,一般簡稱(FCB按鈕),他也是Material Design 設計的一員,FCB和RecycleView搭配是使用也是很常見的操作,譬如在recycleView中下滑隱藏上滑顯示,

關於U3D物件隱藏或顯示的操作

GameObject gameObject; gameObject.renderer.enabled //是控制一個物體是否在螢幕上渲染或顯示 而物體實際還是存在的 只是想當於隱身 // 而物體本身的碰撞體還依然存在的 GameObject.Destroy(); //

分散式體系的部署方式

  Blue/Green Deployment(藍綠部署) 藍綠部署有兩個後臺叢集,一個上線,一個備用。 (1) 部署版本1的應用(一開始的狀態) 所有外部請求的流量都打到這個版本上。 (2) 部署版本2的應用

分布式體系的部署方式

部署 風險 方式 集群 分布 dep 測試 所有 狀態 Blue/Green Deployment(藍綠部署) 藍綠部署有兩個後臺集群,一個上線,一個備用。 (1) 部署版本1的應用(一開始的狀態) 所有外部請求的流量都打到這個版本上。 (2) 部署版本2的應用

【Mybatis】如何繼承Mybatis的Mapper.xml檔案

最近在寫一個 Mybatis 程式碼自動生成外掛,用的是Mybatis來擴充套件,其中有一個需求就是 生成javaMapper檔案和 xmlMapper檔案的時候 希望另外生成一個擴充套件類和擴充套件xml檔案。原檔案不修改,只存放一些基本的資訊,開發過程中只修改擴充套件的Ext檔案 形式