1.什麼時候可以選擇final修飾符
如果想讓一個類不被其他類繼承,不允許在有子類,這時候就要考慮用到final來修飾。
2.用final修飾的類
首先大家要明白,用final修飾的類是不能被繼承的,下面來看一個錯誤案例。
eg:
final class Penguin
{
}
class SubPenguin extends Penguin
{
}
此時這段代碼的class SubPenguin extends Penguin這行代碼會報錯:
The type SubPenguin cannot subclass the final class :翻譯:該類型SubPenguin不能繼承的最後類
即.Penguin類不能被繼承。
3.用final修飾的方法
eg:
class Penguin
{
public final void print(){}
}
class Subpenguin extends Penguin
{
public void print(){}//錯誤
}
此時這段代碼public void print(){}會報錯,提示錯誤信息:
cannot override the final method from Penguin:翻譯:無法覆蓋企鵝的最後方法
即.print方法不能被子類重寫。
4.用final修飾的變量
用final修飾的變量包括成員變量和局部變量,他們將變成常量,只能賦值一次。
public class Dog
{
final String name="小黃";//用final來修飾狗狗的姓名
public void setname(String name)
{
this.name=name; //錯誤,name不能在被賦值。
}
}
5.使用final修飾符的注意點
final可以用來修飾類,方法和屬性,不能修飾構造方法。
6.用final修飾的引用型變量,變量所指對象的屬性值是否能改變?
首先來看一個簡單的例子
//狗狗類
public class Dog
{
String name;//狗狗的姓名
//帶參構造,給狗狗的名字賦值
public Dog(String name)
{
this.name=name;
}
}
//測試類
class Test
{
public static void main(String[] args)
{
final Dog dog=new Dog("小黃");//實例化一個狗對象,用final修飾
dog.name="大黃";
dog=new Dog("小八");
}
}
這段代碼中dog對象被修飾為final成常量,其值不可變,但要注意的是dog.name="大黃";這行代碼並沒有錯,那麼dog=new Dog("小八")是錯的,也就是說,使用final修飾的引用型變量,變量不可以在指向另外的對象,但是所指變量的內容是可以改變的。
結論:使用final修飾的引用型變量時,變量的值時固定不變的,而變量所指對象的屬性值是可變的。