關鍵字abstract和static總結
1. abstract:意為抽象,在Java中可以修飾方法或者類
(1)修飾方法,這個方法是抽象方法,無方法體,這個類一定是抽象類,這個類的子類必須實現這個抽象方法;
(2)修飾類,這個類一定是抽象類,但是不一定有抽象方法;
2. static:意為靜態的,在Java中修飾方法或者變數
2.1 按照是否靜態對類成員變數分,有兩種,被static修飾即叫靜態變數/類變數;另一種是例項變數,兩者區別:
(1)對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為分配一次記憶體,在載入的過程中完成靜態變數的記憶體分配,通過類名呼叫(推薦),也可以使用物件名呼叫(不推薦);
(2)對於例項變數,每建立一個例項,就會為例項變數分配一次記憶體,例項變數在記憶體中有多個拷貝,互不影響(靈活);
(3)靜態變數使用場景:在物件之間共享時,方便訪問變數時;
2.2 static修飾的方法不能被重寫;靜態方法獨立於任何例項,所以必須得有方法體(必須實現);
(1)修飾的方法可以直接通過類名呼叫;被所有物件共享;
(2)靜態只能訪問靜態,非靜態既可以訪問靜態也可以訪問非靜態;
2.3 不加static修飾的成員是物件成員,為每一個物件所有,加static的成員為所有物件共有;
3. abstract 和 static 修飾方法:
(1) abstract無方法體,static有方法體,靜態方法獨立於任何例項,所以必須得有方法體(必須實現),不像是abstract(由子類實現);
(2) static修飾的方法優先於物件存在,所以修飾的方法裡面不能有this,super關鍵字,this和super代表的物件此時並不存在;
(4) static修飾的方法通過類名(子類名)直接呼叫,通過類物件名(子類物件名)呼叫不報錯但有警告;
4. abstract和static不能同時存在: abstract修飾的方法無方法體,不能隨著類的載入而載入到方法區,static修飾的方法隨著類的載入會被載入到類的方法區;
abstract還不能與final同時存在,因為final修飾的方法是最終方法,無法被重寫;
abstract不能與private同時存在,因為private修飾的方法不可見,無法重寫;
!!!個人(新手)整理,定有遺漏或存在錯誤,望指正,抱拳 老鐵!