Java學習之final與匿名內部類
Java學習之final與匿名內部類
0x00 前言
續上幾篇文章,得知子類繼承父類後是可以在父類的基礎上進行改寫的,那麼在程式中有些東西可能是不能讓我們給輕易給改動的,那麼Java給提供了final關鍵字。
0x01 final使用
final:是不可改變的,可以用來修飾類、方法、變數。
修飾類格式:
final class Final {
}
修飾方法格式:
public final void abc(){
System.out.println("一個不可重寫的的方法");
}
修飾變數:
final int a =1;
被該關鍵字修飾的類不能被繼承
被該關鍵字修飾的方法不能被重寫
被該變數修飾的變數,不能被重新賦值。
被final修飾的常量名稱,一般都有書寫規範,所有字母都大寫
0x02 許可權修飾符
前面使用到最多的可能就是pubilc和private,在java中提供了四種訪問許可權,使用不同的訪問許可權修飾時,被修飾的內容有不同的訪問許可權。
public 公共的
prorected 受保護的
default 預設的
private 私有的
這裡可以看到public是最大的許可權,而private是最小的。
如果不加修飾符,預設是default。
0x03 內部類
格式:
public class Final{ public class abc{ } }
內部類訪問的特點:
內部類可以直接訪問外部類的成員,包括私有方法。外部類要訪問內部類的成員,必須建立內部類的物件。
建立內部類物件的格式:
外部類名.內部型別 物件名 = new 外部型別().new 內部型別();
定義的方式和例項化物件的寫法類似。
內部類仍然是一個獨立的類,在編譯之後會內部類會被編譯成獨立的.class檔案,但是前面冠以外部類的類名
和$符號 。
匿名內部類
匿名內部類是內部類的簡化寫法。他的本質是一個帶有具體實現父類或父類介面的匿名子物件。
在程式碼中比較常用的可能就是匿名內部類。
在使用到一個介面的時候需要做的幾步操作,
1.定義實現類
2.重寫父介面的方法
3.例項化實現類物件
4.呼叫重寫後的方法
如果是隻呼叫一次的話,那麼就可以使用到匿名內部類。
前提條件是匿名內部類必須繼承一個父類或者是父介面。
new 父類或者介面名(){
//重寫方法
pubilc void method(){
...
}
}
匿名內部類程式碼實現:
這裡來定義一個父類:
public abstract class Fu {
public abstract void fly();
}
main方法程式碼:
public class ZiMain {
public static void main(String[] args) {
Fu f = new Fu() {
@Override
public void fly() {
System.out.println("會飛");
}
};
f.fly();
}
}
0x04 結尾
一篇文章水完了,在裡面用到比較多的可能就是匿名內部類了,如多執行緒建立的時候,因為執行緒不能被多次呼叫,可以直接使用匿名內部類進行建立。