官术网_书友最值得收藏!

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()。

主站蜘蛛池模板: 乐山市| 井陉县| 宁陵县| 嘉定区| 浦北县| 太仆寺旗| 通山县| 武胜县| 宁明县| 项城市| 合山市| 连云港市| 海兴县| 苗栗市| 永安市| 凤台县| 普兰店市| 南宫市| 湾仔区| 乐安县| 肃宁县| 秭归县| 灵丘县| 岳阳市| 集贤县| 丹巴县| 无锡市| 保德县| 新野县| 华蓥市| 内丘县| 阳信县| 佛冈县| 麦盖提县| 郓城县| 工布江达县| 中江县| 扎兰屯市| 安岳县| 个旧市| 金溪县|