加上final的變數不可以改變。
可以延遲宣告final,但在建構式內需要指定值。(如下例子)
class前加final代表不會有子類別、不能被繼承(類如String)
final方法可以被繼承,但是子類別無法覆載。(可以呼叫使用)
class Dad{
final int x;
public Dad(){
//雖然下面的建構子裡有設定final的值了,但若是呼叫到無參數建構子就會無法確定x的值,所以語法會出錯
x=10;
//↑除非在這裡也幫final給值
//放在其他方法中沒用,因為不一定會被呼叫
}
public Dad(int i){
this.x = i;
System.out.println("呼叫Dad"+i);
}
final public void method(){
System.out.println("Hi");
}
}
class Son extends Dad{
public Son(){
//我也是建構子
super(10);
System.out.print("呼叫Son");
}
public void method(){
//出現錯誤- Cannot override the final method from Dad
}
public void take(){
method();
//可以呼叫
}
}