物件導向-final關鍵字
final關鍵字(掌握)
(1)是最終的意思,可以修飾類,方法,變數。
(2)特點:
A:它修飾的類,不能被繼承。
B:它修飾的方法,不能被重寫。
C:它修飾的變數,是一個常量。
(3)面試相關:
A:區域性變數
a:基本型別 值不能發生改變
b:引用型別 地址值不能發生改變,但是物件的內容是可以改變的
B:初始化時機
a:只能初始化一次。
b:常見的給值
定義的時候。(推薦)
構造方法中。
/*
繼承的程式碼體現
由於繼承中方法有一個現象:方法重寫。
所以,父類的功能,就會被子類給覆蓋調。
有些時候,我們不想讓子類去覆蓋掉父類的功能,只能讓他使用。
這個時候,針對這種情況,Java就提供了一個關鍵字:final
final:最終的意思。常見的是它可以修飾類,方法,變數。
*/
class Fu {
public final void show() {
System.out.println("這裡是絕密資源,任何人都不能修改");
}
}
class Zi extends Fu {
// Zi中的show()無法覆蓋Fu中的show()
public void show() {
System.out.println("這是一堆垃圾");
}
}
class ZiDemo {
public static void main(String[] args) {
Zi z = new Zi();
z.show();//異常
}
}
/*
final可以修飾類,方法,變數
特點:
final可以修飾類,該類不能被繼承。
final可以修飾方法,該方法不能被重寫。(覆蓋,複寫)
final可以修飾變數,該變數不能被重新賦值。因為這個變數其實常量。
常量:
A:字面值常量
"hello",10,true
B:自定義常量
final int x = 10;
*/
//final class Fu //報錯:無法從最終Fu進行繼承
class Fu {
public int num = 10;
public final int num2 = 20;
/*
public final void show() {
}
*/
}
class Zi extends Fu {
//報錯:Zi中的show()無法覆蓋Fu中的show()
public void show() {
num = 100;
System.out.println(num);
//報錯:無法為最終變數num2分配值
//num2 = 200;
System.out.println(num2);
}
}
class FinalDemo {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
面試題:final修飾區域性變數的問題:
/*
面試題:final修飾區域性變數的問題
基本型別:基本型別的值不能發生改變。
引用型別:引用型別的地址值不能發生改變,但是,該物件的堆記憶體的值是可以改變的。
*/
class Student {
int age = 10;
}
class FinalTest {
public static void main(String[] args) {
//區域性變數是基本資料型別
int x = 10;
x = 100;
System.out.println(x);//100
final int y = 10;
//y = 100;
System.out.println(y);//報錯:無法為最終變數y分配值
//區域性變數是引用資料型別
Student s = new Student();
System.out.println(s.age);//10
s.age = 100;
System.out.println(s.age);//100
final Student ss = new Student();
System.out.println(ss.age);//10
ss.age = 100;
System.out.println(ss.age);//100
//重新分配記憶體空間,就是給新的地址值
ss = new Student();//報錯:無法為最終變數ss分配值
}
}
final修飾變數的初始化時機:
列印的是100
報錯:無法為最終變數num2分配值,因為常量不能重新賦值
/*
final修飾變數的初始化時機
A:被final修飾的變數只能賦值一次。
B:在構造方法完畢前。(僅僅針對非靜態的常量,因為靜態的早就載入了)
*/
class Demo {
int num;
final int num2;
{
//num2 = 10;
}
public Demo() {
num = 100;
num2 = 200;
}
}
class FinalTest2 {
public static void main(String[] args) {
Demo d = new Demo();
System.out.println(d.num);
System.out.println(d.num2);
}
}
相關文章
- 物件導向-static關鍵字物件
- Java物件導向重要關鍵字Java物件
- [Java物件導向]finalJava物件
- final關鍵字
- PHP 物件導向 final類與final方法PHP物件
- Java Final關鍵字Java
- final關鍵字深入解析
- Java 關鍵字之 finalJava
- Java中final關鍵字Java
- java之final關鍵字Java
- 物件導向程式設計的關鍵目標物件程式設計
- 物件導向相關物件
- Java併發--final關鍵字Java
- java基礎-關鍵字finalJava
- Re:物件導向程式設計的關鍵目標物件程式設計
- Java中final關鍵字如何使用?Java
- 物件導向-物件導向思想物件
- JavaSE —— 第11步 —— 最關鍵的一點(物件導向) 11.1物件導向和麵向過程的區別Java物件
- 關於物件導向的困惑!物件
- final關鍵字的作用(skycto JEEditor)
- java中的static和final關鍵字Java
- Java基礎——final和static關鍵字Java
- Java關鍵字static、final使用小結Java
- java final和static關鍵字學習Java
- 徹底搞定Java關鍵字final、staticJava
- java基礎----->Static 和 Final 關鍵字Java
- Java關鍵字final、static使用總結Java
- Java面試題,深入理解final關鍵字Java面試題
- Java 中 final 關鍵字有什麼用Java
- 深入理解Java中的final關鍵字Java
- 程式導向與物件導向物件
- 物件導向與程式導向物件
- “程序導向”和“物件導向”物件
- 物件導向物件
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- 物件導向,搞定物件物件
- 萬字長文深度剖析物件導向的javascript物件JavaScript
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵