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

3.1.2 最終類

1.final類

有一種類是不能派生出子類的,我們稱這種類為最終類。即我們用final來修飾的類。在設計類時候,如果這個類不需要有子類,該類的實現細節不允許改變,并且確信這個類不會再被擴展,或者是為了特殊原因不讓其他開發人員繼承使用,那么就將該類設計為final類,比如Java提供的java.lang.String類。

2.final方法

如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。final方法不能被覆蓋,即子類的方法構型不能與父類的final方法構型相同。

【例3-2】 使用final方法的例子。

            class Test1 {
                public void f1() {
                    System.out.println("f1");
                }
                // 無法被子類覆蓋的方法
                public final void f2(){
                    System.out.println("f2");
                }
            }
            public class Test2 extends Test1{
                public void f1() {
                    System.out.println("Test1父類方法f1被覆蓋!");
                }
                public static void main(String[] args) {
                    Test2 t = new Test2();
                    t.f1();
                    t.f2();// 調用從父類繼承過來的final方法
                }
            }

程序的運行結果如下:

            Test1父類方法f1被覆蓋!
            f2

如上面的例子所示,如果與重寫f1()一樣來重寫f2(),則編譯器就會給出出錯信息。

特別提示:

final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是由final修飾的。

3.final變量(常量)

final變量實際上是Java語言的符號常量,可在定義時賦初值或在定義后的其他地方賦初值,但不能再次賦值。習慣上使用大寫的標識符表示final變量。例如:

            final double PI=3.1416;
            final double G=9.18;

另外,final變量定義的時候,可以先聲明,而不給初值,這種變量也稱為final空白,空白final變量在對象初始化時必須被初始化。

工作分解-操作方案

(1)分析類及類結構;

(2)按照類圖編制出類框架;

(3)實現類方法;

(4)創建對象;

(5)調用對象中的方法完成具體功能。

工作實施

1.分析類及關系

2.定義抽象類Animal

類圖如圖3-1所示。

圖3-1 類圖

        abstract class Animal{
            private final String type;
            public String getType() {
                return type;
            }
            public abstract void sound();//抽象方法
            public Animal(String type){//為空白final屬性賦初值
                this.type = type;
            }
        }

3.Dog類利用構造方法為type屬性賦值

        public Dog() {
            super("");
        }

4.Dog類實現Animal的sound()

        public void sound() {
                System.out.print(type+"的叫聲是汪汪汪...");
        }

5.main方法進行測試

        public static void main(String args[]){
            Dog d = new Dog();
            d.sound();
        }

6.完整源代碼

        abstract class Animal{
            private final String type;
            public String getType() {
                return type;
            }
            public abstract void sound();
            public Animal(String type) {
                this.type = type;
            }
        }
        class Dog extends Animal{
                public Dog() {
                    super("狗");
                }
                public void sound() {
                    System.out.print(super.getType()+"的叫聲是汪汪汪...");
                }
            }

程序運行結果:

            狗的叫聲是汪汪汪...
主站蜘蛛池模板: 丁青县| 无棣县| 鄂尔多斯市| 哈尔滨市| 新干县| 新安县| 麻阳| 井研县| 密云县| 舒城县| 新营市| 渝中区| 抚顺县| 渝北区| 邻水| 大姚县| 行唐县| 黄大仙区| 汪清县| 卢湾区| 黑龙江省| 六安市| 阿尔山市| 海盐县| 宁都县| 卓资县| 印江| 泸西县| 咸宁市| 浦东新区| 西盟| 齐河县| 阿巴嘎旗| 文山县| 鹤山市| 高安市| 温州市| 交口县| 肇庆市| 申扎县| 桂林市|