一、訪問控制修飾符
1. default(什么也不寫):在同一包內(nèi)可見,不使用任何修飾符。
2. private:在同一類內(nèi)可見。不能修飾類(外部類)
3. public:對所有類可見。
4. protected:對同一包內(nèi)類和子類可見。不能修飾類(外部類)
default和public使用對象為類、接口、變量、方法。
private和protected使用對象為變量和方法。
訪問控制和繼承
父類聲明為public的方法子類中也必須為public、
父類中聲明為protected的方法在子類中聲明為public或protected,不能為private。
父類中聲明為private的方法,子類不能繼承
二、非訪問控制修飾符
1. static:修飾靜態(tài)方法和靜態(tài)變量。
靜態(tài)方法:不能使用非靜態(tài)變量。
靜態(tài)變量:只有一份拷貝,局部變量不能被聲明為static變量
2. final:修飾類、方法、變量。修飾的類不能被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,不可修改。
3. abstract:用來創(chuàng)建抽象類和抽象方法。
抽象類:
不能用來實(shí)例化對象,是為了將來對該類進(jìn)行擴(kuò)充。
若一個(gè)類包含抽象方法,該類一定要聲明為抽象類。
抽象類可以包含抽象方法和非抽象方法。
abstract class Dog{
? ? private String price;
? ? public abstract void goFast();//抽象方法
}
抽象方法:
是一種沒有任何實(shí)現(xiàn)的方法,具體實(shí)現(xiàn)由子類提供。
抽象方法不能被聲明為final和static。
任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法,除非它也是抽象類。
抽象方法的聲明以分號(hào)結(jié)尾。
public abstract class Dog{
? ? abstract void m(); //抽象方法
}
class MyDog extends Dog{
? ? //實(shí)現(xiàn)抽象方法
? ? void m(){
? ? ...
? ? }
}
4. synchronized:該關(guān)鍵字聲明的方法同一時(shí)間只能被一個(gè)線程訪問
5. transient:序列化的對象包含被 transient 修飾的實(shí)例變量時(shí),java 虛擬機(jī)(JVM)跳過該特定的變量。
該修飾符包含在定義變量的語句中,用來預(yù)處理類和變量的數(shù)據(jù)類型。
6. volatile:volatile 修飾的成員變量在每次被線程訪問時(shí),都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),會(huì)強(qiáng)制線程將變化值回寫到共享內(nèi)存。這樣在任何時(shí)刻,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值。
一個(gè) volatile 對象引用可能是 null。