1. 程式人生 > >final與abstract關鍵字

final與abstract關鍵字

模板方法 繼承 vat 事物 dem 方法 構造函數 部分 public

final特點:

1:這個關鍵字是一個修飾符,可以修飾類,方法,變量。

2:被final修飾的類是一個最終類,不可以被繼承。

3:被final修飾的方法是一個最終方法,不可以被覆蓋。

4:被final修飾的變量是一個常量,只能賦值一次。

其實這樣的原因的就是給一些固定的數據起個閱讀性較強的名稱。

不加final修飾不是也可以使用嗎?那麽這個值是一個變量,是可以更改的。加了final,程序更為嚴謹。常量名稱定義時,有規範,所有字母都大寫,如果由多個單詞組成,中間用 _ 連接。

抽象類: abstract

抽象:不具體,看不明白。抽象類表象體現。

在不斷抽取過程中,將共性內容中的方法聲明抽取,但是方法不一樣,沒有抽取,這時抽取到的方法,並不具體,需要被指定關鍵字

abstract所標示,聲明為抽象方法。

抽象方法所在類一定要標示為抽象類,也就是說該類需要被abstract關鍵字所修飾。

抽象類的特點:

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以描述類和方法,不可以描述變量)。

2:抽象方法只定義方法聲明,並不定義方法實現。

3:抽象類不可以被創建對象(實例化)。

4:只有通過子類繼承抽象類並覆蓋了抽象類中的所有抽象方法後,該子類才可以實例化。否則,該子類還是一個抽象類。

抽象類的細節:

1:抽象類中是否有構造函數?有,用於給子類對象進行初始化。

2:抽象類中是否可以定義非抽象方法?

可以。其實,抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數。而且比一般類少了一個創建對象的部分。

3:抽象關鍵字abstract和哪些不可以共存?final ,private , static

4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創建對象。

-----------------------------------------------------------------------------------------------

模板方法設計模式:

解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。

abstract class GetTime{

public final void getTime(){ //此功能如果不需要復寫,可加final限定

long start = System.currentTimeMillis();

code(); //不確定的功能部分,提取出來,通過抽象方法實現

long end = System.currentTimeMillis();

System.out.println("毫秒是:"+(end-start));

}

public abstract void code(); //抽象不確定的功能,讓子類復寫實現

}

class SubDemo extends GetTime{

public void code(){ //子類復寫功能方法

for(int y=0; y<1000; y++){

System.out.println("y");

}

}

}

final與abstract關鍵字