- Java面向?qū)ο筌浖_發(fā)
- 姚駿屏 汪衛(wèi)星主編
- 666字
- 2018-12-29 19:04:16
2.2.3 成員的覆蓋
如果有一個(gè)名為B的子類和一個(gè)名為A的父類,它們出現(xiàn)了相同的成員時(shí),在子類B中直接訪問該成員會(huì)得到什么結(jié)果?例如,考慮下面的程序。
【例2-6】 在子類中定義了與父類同名的成員,從而隱藏了父類同名成員。
// 父類A class A { int x = 100; public void display() { System.out.println("執(zhí)行父類A的display()方法"); System.out.println("SuperClass A: " + x); } } // 子類B,繼承于父類A class B extends A { int x=200;// 在子類B中父類A的同名變量x被隱藏 public void display(){ // 方法的重寫 System.out.println("執(zhí)行子類B的display()方法"); System.out.println("SubClass B:"+x); // 直接輸出為子類變量x } public static void main(String[] args) { B b = new B(); b.display(); } }
該程序的運(yùn)行結(jié)果如下:
執(zhí)行子類B的display()方法 SubClass B: 200
從本示例程序中發(fā)現(xiàn),在子類B中直接訪問和父類同名成員時(shí),只能訪問到B中的同名成員。像這種子類(派生類)新增的成員名稱與父類(超類)成員相同,則稱為成員覆蓋。成員覆蓋包括成員變量的隱藏和成員方法的重寫。
1.成員變量的隱藏
在類的繼承中,若在子類中定義了與父類同名的成員變量,則在子類中父類的同名成員變量被隱藏。父類的同名成員變量在子類對(duì)象中仍占據(jù)自己的存儲(chǔ)空間,子類隱藏父類的同名成員變量只是使它不可見。在【例2-6】中,子類B就隱藏了父類A的同名成員變量x,故在B中我們直接訪問x得到值200。
2.成員方法的重寫
跟子類可以定義與父類同名的成員變量,從而實(shí)現(xiàn)對(duì)父類成員變量的隱藏的情況一樣,子類也可以定義與父類同名的成員方法,實(shí)現(xiàn)對(duì)父類方法的覆蓋(方法的重寫)。子類成員方法對(duì)父類同名成員方法的覆蓋將使得父類的方法在子類對(duì)象中不復(fù)存在。注意,重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數(shù)和相同的返回類型。如【例2-6】中,子類B就重寫了父類A的同名方法display()。
推薦閱讀
- Visual Basic程序開發(fā)(學(xué)習(xí)筆記)
- 高效微控制器C語言編程
- Boost C++ Application Development Cookbook(Second Edition)
- Offer來了:Java面試核心知識(shí)點(diǎn)精講(原理篇)
- 零基礎(chǔ)學(xué)Python數(shù)據(jù)分析(升級(jí)版)
- PLC編程與調(diào)試技術(shù)(松下系列)
- 青少年P(guān)ython編程入門
- Android程序設(shè)計(jì)基礎(chǔ)
- Java SE實(shí)踐教程
- Web Developer's Reference Guide
- Learning Ionic
- 算法圖解
- Arduino機(jī)器人系統(tǒng)設(shè)計(jì)及開發(fā)
- Penetration Testing with the Bash shell
- C語言程序設(shè)計(jì)實(shí)踐