這里對final關鍵字進行總結。 final類 當類聲明為final時,就不能定義這個類的子類。因為final類的類無法定義子類,所以final類聲明的所有方法不會被覆蓋(override)。 final方法 若將實例方法聲明為final時,這個方法無法被子類所覆蓋(override)。 若將類方法(static方法)聲明為final時,這個方法無法被子類所隱藏(hide)。對隱藏這個術語不熟,本文最后會加上。 final字段(final屬性) final字段的值只能指定一次。 final實例字段的值只能在定義時或者在構造器中指定。 如: class A{

final int i = 1;

} class A{

final int i;

public A(){

this.i = 2;

}

} final類字段的值只能在定義是或者在static塊(靜態初始化塊)中指定。 class A{

static final int i = 12;

} class A{

static final int i;

static{

i = 12;

}

} final局部變量和final參數 final局部變量的值只能指定一次。 final參數的值在方法被調用時,由實參指定,不能再次指定(實際上也滿足被指定一次的原則)。 下面對java中類的繼承中的覆蓋(override)和隱藏(hide)進行總結。 在《Java核心技術卷一》中對隱藏是采用的訪問限定符(如public,private,protected)來實現的。這里的隱藏不是采用訪問限定符來實現的,而是采用子類和父類有同名的類方法和字段(實例字段和靜態字段)來實現的。在實際編程中,隱藏一般只用于類方法,即父類的類方法被子類中同名(這里的同名指方法名和參數都一樣,其實返回值也必須一樣,可以試一試)的類方法隱藏。 這里繼續總結一下:
  1. 子類可以覆蓋父類的實例方法(方法名、參數和返回值都一樣),另外,這里還有一個重載(overload)的概念,重載是一個靜態的概念,是在編譯時根據方法名和參數來確定的,重載是一個類自身的一個屬性,和繼承沒有關系。
  2. 子類可以隱藏父類的類方法(方法名、參數和返回值都一樣)
  3. 子類可以隱藏父類的字段(實例字段和靜態字段)(通過在子類中定義字段名相同(類型可和父類不一樣)的字段即可)。
覆蓋是動態的概念,是在運行時決定的。重載和隱藏是靜態的概念,是在編譯時決定的。 參考:
  1. 《Java多線程設計模式》中國鐵道出版社 2005

文章來源:http://localhost/wp2/?p=61