C語言中文網 目錄

Java super關鍵字:super調用父類的構造方法、利用super訪問父類成員

由于子類不能繼承父類的構造方法,因此,要調用父類的構造方法,必須在子類的構造方法體的第一行使用 super() 方法。該方法會調用父類相應的構造方法來完成子類對象的初始化工作。

在以下情況下需要使用 super 關鍵字:
  • 在類的構造方法中,通過 super 語句調用該類的父類的構造方法。
  • 在子類中訪問父類中的成員。

使用 super 調用父類的構造方法

子類可以通過 super 關鍵字來調用一個由父類定義的構造方法,格式如下:
super(parameter-list);
其中,parameter-list 指定了父類中構造方法所需的所有參數。super() 必須是在子類構造方法的主體第一行。

例如,在 Person 類中指定了兩個構造方法。示例代碼如下:
public People(String name,int age,String sex,String sn)
{
    this.name=name;
    this.age=age;
    this.sex=sex;
    this.sn=sn;
}
public People(String name,String sn)
{
    this.name=name;
    this.sn=sn;
}

那么,Student 類繼承了 Person 類,就可以使用 super 語句來定義 Student 類的構造方法。示例代碼如下:
public Student(String name,int age,String sex,String sn,String stuno,String department)
{
    super(name,age,sex,sn);    //調用父類中含有4個參數的構造方法
    this.stuNo=stuno;
    this.department=department;
}
public Student(String name,String sn,String stuNo)
{
    super(name,sn);    //調用父類中含有兩個參數的構造方法
    this.stuNo=stuNo;
}

從上述 Student 類構造方法代碼可以看出,super 用來直接調用父類中的構造方法,使用它可以使書寫代碼更簡潔方便。

使用 super 訪問父類成員

使用 super 訪問父類中的成員與 this 關鍵字的使用相似,只不過它引用的是子類的父類,基本形式如下:
super.member
其中,member 是父類中的方法或屬性名稱。這種形式多用于子類的成員名隱藏了父類中的同名成員的情況。

例 1

在 Animal 類和 Cat 類中分別定義了 public 類型的 name 屬性和 private 類型的 name 屬性,并且 Cat 類繼承 Animal 類。那么,我們可以在 Cat 類中通過 super 關鍵字來訪問父類 Animal 中的 name 屬性,通過 this 關鍵字來訪問本類中的 name 屬性,如下面的代碼:
//父類Animal的定義
public class Animal
{
    public String name;    //動物名字
}
//子類Cat的定義
public class Cat extends Animal
{
    private String name;    //名字
    public Cat(String aname,String dname)
    {
        super.name=aname;    //通過super關鍵字來訪問父類中的name屬性
        this.name=dname;    //通過this關鍵字來訪問本類中的name屬性
    }
    public String toString()
    {
        return"我是"+super.name+",我的名字叫"+this.name;
    }
    public static void main(String[] args)
    {
        Animal cat=new Cat("動物","喵星人");
        System.out.println(cat);
    }
}

上述代碼演示了使用 super 實現子類的成員名隱藏父類中同名成員的情況。盡管 Cat 類中的屬性 name 隱藏了 Animal 類中的 name 屬性,但是 super 允許訪問父類中的 name 屬性。另外,super 還可以用于調用被子類隱藏的方法。

運行程序,輸出結果如下:
我是動物,我的名字叫喵星人

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo