2008/11/05

[ Java ] About Override & Super

Java 覆蓋 (Override) 範例:

class JCatKind{
    private String kind;
    void SetKind(String k){
        kind = k;
    }
    void Show(){
        System.out.println("Pet Kind :"+kind);
    }
}

class JCat extends JCatKind{
    private String name;
    private int age;
    void SetName(String n){
        name = n;
    }
    void SetAge(int a){
        age = a;
    }
    void Show(){
        System.out.println("Pet Name :"+name);
        System.out.println("Pet Age :"+age);
    }
}

public class JOverride {
    public static void main(String[] args){
        JCat cat = new JCat();
        cat.SetKind("波斯貓");
        cat.SetName("小花");
        cat.SetAge(1);
        cat.Show();
    }
}

輸出:

Pet Name :小花
Pet Age :1

說明:

程式中有兩個Show()方法,子類別JCat會繼承父類別JCatKind的成員,而子類別中同樣有定義了一個與父類別相同的名稱方法成員且傳入的參數及型別皆相同,此時父類別中的方法會被子類別中的方法給覆蓋掉,當我們呼叫Show()方法時只會執行子類別的Show()方法。


Java 使用 Super 範例:

class JCatKind{
    private String kind;
    void SetKind(String k){
        kind = k;
    }
    void Show(){
        System.out.println("Pet Kind :"+kind);
    }
}

class JCat extends JCatKind{
    private String name;
    private int age;
    void SetName(String n){
        name = n;
    }
    void SetAge(int a){
        age = a;
    }
    void Show(){
        super.Show();
        System.out.println("Pet Name :"+name);
        System.out.println("Pet Age :"+age);
    }
}

public class JOverride {
    public static void main(String[] args){
    JCat cat = new JCat();
    cat.SetKind("波斯貓");
    cat.SetName("小花");
    cat.SetAge(1);
    cat.Show();
    }
}

輸出:

Pet Kind :波斯貓
Pet Name :小花
Pet Age :1

說明:

JCatKind的Show()方法雖然被Override掉,但並不表示它已經不存在,我們可以使用Super將它保留,只要在子類別JCat的Show()方法內加入『super.Show();』即可呼叫父類別中被覆蓋掉的方法。

0 意見: