面向物件(11-2):final關鍵字
阿新 • • 發佈:2021-12-11
面向物件(11-2):final關鍵字
一、final關鍵字的介紹
1、如果父類的東西不想讓子類去繼承:可以使用private修飾或者static
由於繼承方法中有一個現象:方法重寫
所以,當方法可以被重寫的時候,父類原本的方法還在,但呼叫的是子類重寫後的方法;
如果我依舊想保留父類原本的方法,不想讓子類重寫,但想讓子類去用
針對於這樣的情況,java提供了一個關鍵字:final(最終的、不可改變的)
2、使用格式:一般情況下,把final放在訪問許可權修飾後、返回值前
常見的情況下,final不僅可以修飾成員方法,也可以修飾類,變數
案例 :
class Father4{ //被final修飾的成員方法,不能被子類重寫。 public final void fun(){ System.out.println("這是父類的fun方法"); } } class Son4 extends Father4{ /*public void fun(){ System.out.println("這是父類的fun方法"); } 父類中方法中加了final,在子類中重寫會報錯 */ }
二、final關鍵字的應用
特點
1、被final所修飾的類無法被其他類所繼承
案例:
//建立一個父類
final class Father00{
}
下面這樣寫會報錯
/*
建立一個子類
class Zi00 extends Father00{
}
*/
2、被final所修飾的方法,子類無法重寫;
但是在同一個類中,可以出現同名不同引數列表的且被final修飾的方法,這正是過載
(即、被final所修飾的方法,可以過載,不可重寫)
3、被final修飾的變數變成了常量,無法再重新分配值 常量: A: 字面值常量: 10,12.34,"hello",'a',true B: 自定義常量 其實就是被final修飾的變數。 final int a = 10;
三、final關鍵字面試題
1、final修飾區域性變數
(1)被final修飾的區域性變數是基本資料型別的時候,不可以修改值
(2)被final修飾的區域性變數是引用資料型別的時候,該物件的地址值是無法改變的,
但是引用堆記憶體中的變數是可以發生改變
案例1:
public class FinalDemo2 { public static void main(String[] args) { //區域性變數,並且a是基本資料型別 int a = 10;//將10賦值給a System.out.println(a);//10 a = 100;//二次賦值,將100重新賦值給a System.out.println(a);//100 //加final修飾 final int b = 100; System.out.println(b);//100 //b = 200;前面b被final修飾,不可二次賦值,否則報錯 //System.out.println(b); //被final修飾的區域性變數是基本資料型別的時候,不可以修改值(也就是不可給他進行二次賦值)
案例2:
class Student{
int age = 18;
}
public class FinalDemo2 {
public static void main(String[] args) {
//建立學生物件
Student s1 = new Student();
System.out.println(s1.age);//18
//final修飾物件
final Student s2 = new Student();
System.out.println(s2.age);//地址值無法改變,結果仍是18
s2.age = 19;
System.out.println(s2.age);//引用堆記憶體中的變數發生改變,結果是19
}
}