Java 快速導覽 - 物件導向概念 final 成員

成員 (member) 宣告時若使用關鍵字 final 修飾,表示該成員為常數 (constant) ,屬性 (field) 或區域變數 (local variable) 都不能重新給值,而方法 (method) 繼承 (inherit) 後不可被改寫 (override) 。



簡單例子如下
class FinalDemo1 {
    static final double PI = 3.141592653589793; 
    
    public final void test() {
        System.out.println("這是final方法");
    }
    
    public static void main(String[] args) {
        final double pi = 3.141592653589793;
        FinalDemo1 fd = new FinalDemo1();
        
        System.out.println(fd.PI);
        System.out.println(pi);
        fd.test();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:FinalDemo1.java
    功能:示範物件導向的基本觀念 
    作者:張凱慶
    時間:西元 2010 年 10 月 */


編譯後執行,結果如下



以下例子示範重新給值給 final 變數
class FinalDemo2 {
    static final double PI = 3.141592653589793; 
    
    public final void test() {
        System.out.println("這是final方法");
    }
    
    public static void main(String[] args) {
        final double pi = 3.141592653589793;
        FinalDemo1 fd = new FinalDemo1();
        
        pi = 3.14;
        
        System.out.println(fd.PI);
        System.out.println(pi);
        fd.test();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:FinalDemo2.java
    功能:示範物件導向的基本觀念 
    作者:張凱慶
    時間:西元 2010 年 10 月 */


編譯會發生錯誤



以下例子示範繼承後改寫 final 方法
class FinalDemo1 {
    static final double PI = 3.141592653589793; 
    
    public final void test() {
        System.out.println("這是final方法");
    }
}

class FinalDemo3 extends FinalDemo1 {
    public final void test() {
        System.out.println("這是改寫過的final方法");
    }
    
    public static void main(String[] args) {
        final double pi = 3.141592653589793;
        FinalDemo1 fd = new FinalDemo1();
        
        System.out.println(fd.PI);
        System.out.println(pi);
        fd.test();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:FinalDemo3.java
    功能:示範物件導向的基本觀念 
    作者:張凱慶
    時間:西元 2010 年 10 月 */


編譯會發生錯誤



中英文術語對照
成員member
常數constant
屬性field
區域變數local variable
方法method
繼承inherit
改寫override






2 則留言:

Hector 提到...

而方法 (method) 繼承 (inherit) 後不可被改寫 (overload) →是override吧!
overload和oberride是不一樣的東西喔!

Kaiching Chang 提到...

這邊打錯字了,已修改,感謝指正 ^_^