一篇文章帶你弄懂Final關(guān)鍵字的相關(guān)知識(shí)
一、final關(guān)鍵字
1.如果一個(gè)類(lèi)被final修飾符所修飾,表示該類(lèi)不可能有子類(lèi),這樣的類(lèi)就叫做最終類(lèi)。final關(guān)鍵字可以修飾類(lèi)、變量、方法。
2.final關(guān)鍵字修飾類(lèi)、修飾方法、修飾變量的特點(diǎn)
final關(guān)鍵字修飾類(lèi):不能被別的類(lèi)繼承;
final關(guān)鍵字修飾方法:方法也不能被覆蓋,也就是方法不能被繼承的子類(lèi)重寫(xiě);
final關(guān)鍵字修飾變量:成員變量、局部變量是常量,僅一次賦值。
二、final關(guān)鍵字修飾類(lèi)
1.當(dāng)類(lèi)被final關(guān)鍵字修飾,表示這個(gè)類(lèi)是不能被繼承的。
2.final關(guān)鍵字修飾類(lèi)例子
- //定義Fruit類(lèi)
- final class Fruit{
- //info()方法
- public void info(){
- System.out.print("fruit");
- }
- }
- //定義Cherry繼承Fruit類(lèi)
- class Cherry extends Fruit{
- //infor()方法
- public void info(){
- System.out.print("cherry");
- }
- }
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cherry c=new Cherry();//實(shí)例化子類(lèi)Cherry對(duì)象
- c.info();//調(diào)用info()方法
- }
- }
輸出的結(jié)果是:
從上面的編譯結(jié)果可以看出是錯(cuò)誤的,因?yàn)閒inal關(guān)鍵字修飾Fruit類(lèi),當(dāng)Cherry類(lèi)繼承Fruit類(lèi)時(shí),編譯出現(xiàn)了“Unresolved compilation problem: The type Cherry cannot subclass the final class Fruit”表示Cherry類(lèi)型不能將final類(lèi)水果子類(lèi)化,所以final修飾的類(lèi)是不能被別的類(lèi)繼承的。
三、final關(guān)鍵字修飾方法
1.final關(guān)鍵字修飾方法,表示該類(lèi)的子類(lèi)的不可以重寫(xiě)方法。
2.final關(guān)鍵字修飾方法案例
- //定義Fruit類(lèi)
- class Fruit{
- //使用final修飾info()方法
- public final void info(){
- System.out.print("fruit");
- }
- }
- //定義Cherry繼承Fruit類(lèi)
- class Cherry extends Fruit{
- //重寫(xiě)Fruit類(lèi)的info()方法
- public void info(){
- System.out.print("cherry");
- }
- }
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cherry c=new Cherry();//實(shí)例化子類(lèi)Cherry對(duì)象
- c.info();//調(diào)用info()方法
- }
- }
3.運(yùn)行的結(jié)果是:
從上面的代碼中編譯結(jié)果是錯(cuò)誤的,因?yàn)镃herry類(lèi)重寫(xiě)Fruit類(lèi)的info()方法,我們可以看到final關(guān)鍵字修飾Fruit類(lèi)的info()方法,所以final關(guān)鍵字修飾的方法是最終的,子類(lèi)是不能對(duì)這個(gè)方法進(jìn)行重寫(xiě)的。如果父類(lèi)定義的某個(gè)方法,不想讓子類(lèi)重寫(xiě),就可以使用這個(gè)final關(guān)鍵字修飾方法。
四、final關(guān)鍵字修飾變量
1.final關(guān)鍵字修飾變量時(shí),變量就變成常量,也就是一旦被賦值,就不能重新賦值。
2.final關(guān)鍵字修飾成員變量,需要在定義顯示指定初始值。
3.final關(guān)鍵字修飾局部變量,可以在定義時(shí)指定初始值,也可以不指定初始值。
4.final關(guān)鍵字修飾局部變量的例子
- final int i = 3;//第一次賦值
- i= 6;//再次賦值
上面代碼中會(huì)出現(xiàn)編譯錯(cuò)誤,因?yàn)槭侵匦陆oi賦值,用final關(guān)鍵字修飾int類(lèi)型變量i,被final關(guān)鍵字修飾的變量為常量,只能被賦值一次,不可以被重新賦值,i是基本數(shù)據(jù)類(lèi)型,i的內(nèi)容是值。
5.final關(guān)鍵字修飾成員變量例子
- //定義Fruit類(lèi)
- class Fruit{
- final String name;//final關(guān)鍵字修飾name屬性
- double weight=66;//水果的重量weight屬性
- //info()方法打印水果信息
- public final void info(){
- System.out.print("我是一個(gè)"+name+"重量為:"+weight+"g!");
- }
- }
- public class p24 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Fruit f=new Fruit();//實(shí)例化Fruit對(duì)象
- f.info();//調(diào)用info()方法
- }
- }
運(yùn)行的結(jié)果是:
從上面的運(yùn)行結(jié)果我們可以看到編譯是錯(cuò)誤的,因?yàn)閒inal關(guān)鍵字修飾的成員變量,在定義的時(shí)要給它一個(gè)初始值。
五、總結(jié)
本文主要介紹了final關(guān)鍵字修飾類(lèi)、final關(guān)鍵字修飾方法、final關(guān)鍵字修飾變量。
final關(guān)鍵字修飾類(lèi)說(shuō)明了是不能被別的類(lèi)繼承的。final關(guān)鍵字修飾方法表示該類(lèi)的子類(lèi)的方法是不可以被重寫(xiě)的。
final關(guān)鍵字修飾變量時(shí),成員變量、局部變量是常量,僅一次賦值。final關(guān)鍵字修飾類(lèi)、方法、變量也通過(guò)案例幫助理解。
本文轉(zhuǎn)載自微信公眾號(hào)「 Java進(jìn)階學(xué)習(xí)交流」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 Java進(jìn)階學(xué)習(xí)交流公眾號(hào)。




























