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

2.2.5 派生類的初始化

如果有一個名為B的子類和一個名為A的父類,構造B對象時,A的構造方法是否要執行?如果要執行,A的構造方法在B之前還是之后執行?答案是在一個類層次中,如果構造子類對象,必先調用父類構造方法;構造方法按派生順序,即從父類到子類的順序被調用。

例2-8】 下面的程序展示了何時執行構造方法:

            //父類A
            class A {
                public A() {
                    System.out.println("執行父類A的構造方法");
                }
            }
            // 子類B,繼承于父類A
            class B extends A {
                public B() {
                    System.out.println("執行子類B的構造方法");
                }
            }
            public class Test {
                public static void main(String[] args) {
                    B a = new B();
                }
            }

該程序的運行結果如下:

            執行父類A的構造方法
            執行子類B的構造方法

可以看出,構建子類對象的時候將先調用父類的構造方法。

在創建派生類的對象時,使用派生類的構造方法對其初始化,不但要對自身的成員變量賦初值,還要對父類的成員變量賦初值。因為成員變量賦初值通常在構造方法中完成,因此在Java語言中,允許派生類繼承父類的構造方法。構造方法的繼承遵循如下的原則:

(1)若父類是無參數的構造方法,則子類無條件地繼承該構造方法。

(2)若子類無自己的構造方法,則它將繼承父類的無參構造方法作為自己的構造方法。

(3)若子類有自己的構造方法,則在創建子類對象時,它將先執行繼承自父類的無參構造方法,然后再執行自己的構造方法。如【例2-8】所示。

(4)若父類是有參數的構造方法,子類可以通過在自己的構造方法中使用super關鍵字來調用它,但這個調用語句必須是子類構造方法的第一個可執行語句。

主站蜘蛛池模板: 县级市| 三河市| 陆良县| 南京市| 丰台区| 囊谦县| 延长县| 南昌市| 仁怀市| 库车县| 敦煌市| 益阳市| 大港区| 山东省| 永城市| 台南县| 龙里县| 海晏县| 韩城市| 澄江县| 内乡县| 嘉荫县| 娄底市| 柘城县| 昌黎县| 巴林右旗| 苍山县| 邢台县| 齐河县| 昔阳县| 葵青区| 渝中区| 登封市| 呼伦贝尔市| 客服| 仁怀市| 蓬莱市| 昌江| 平原县| 漳浦县| 论坛|