java中的修飾符有四種:
- 默認(rèn)的裹驰,也稱為default,在同一包內(nèi)可見片挂,不使用任何修飾符幻林。
- 私有的,以private修飾符指定音念,在同一類內(nèi)可見沪饺。
- 共有的,以public修飾符指定症昏,對(duì)所有類可見随闽。
- 受保護(hù)的父丰,以protected修飾符指定肝谭,對(duì)同一包內(nèi)的類和所有子類可見。
protected修飾符比default的權(quán)限要大蛾扇,子類指的是攘烛,同一包,或者其他包中的一切子類镀首。
private<default<protected<public
訪問控制和繼承原則
請(qǐng)注意以下方法繼承的規(guī)則:
- 父類中聲明為public的方法在子類中也必須為public坟漱。
- 父類中聲明為protected的方法在子類中要么聲明為protected,要么聲明為public更哄。不能聲明為private芋齿。
子類方法,變量的修飾符必須大于等于父類的方法成翩,變量的修飾符
但是也有特例: - 父類中默認(rèn)修飾符default聲明的方法觅捆,能夠在子類中聲明為private。
- 父類中聲明為private的方法麻敌,不能夠被繼承栅炒。
非訪問修飾符
- static修飾符,用來創(chuàng)建類方法和類變量。
- Final修飾符赢赊,用來修飾類乙漓、方法和變量,
(1) 修飾的類不能夠被繼承释移;
(2) 修飾的方法叭披,可以被繼承,不能被繼承類覆寫玩讳,可以被重載趋观;
(3) 修飾的變量為常量,是不可修改的锋边。 - Abstract修飾符皱坛,用來創(chuàng)建抽象類和抽象方法。
- Synchronized和volatile修飾符豆巨,主要用于線程的編程剩辟。
被private修飾的方法和被final修飾的方法不同: - private聲明的方法不能被繼承。
- final修飾的方法不能被重寫往扔,可以被繼承贩猎。
類訪問修飾符:
- 可訪問控制符是:公共類修飾符public。
- 非訪問控制符有:抽象類修飾符abstract萍膛;最終類修飾符final吭服。
- 類缺省訪問控制符:如果一個(gè)類沒有訪問控制符,說明它具有缺省的訪問控制符特性蝗罗。此時(shí)艇棕,這個(gè)類只能被同一個(gè)包中的類訪問或引用。這一訪問特性又稱為包訪問性串塑。
接口訪問修飾符:
- 可訪問控制符是:公共類修飾符public沼琉。
- 非訪問控制符有:抽象類修飾符abstract。
Static修飾符
被static修飾的變量和方法在內(nèi)存中單獨(dú)開辟一塊區(qū)域桩匪〈虮瘢可以通過"類名.局部變量名";"類名.方法名"來訪問傻昙。
修飾變量(靜態(tài)變量):
Static關(guān)鍵字用來聲明獨(dú)立于對(duì)象的靜態(tài)變量闺骚,無論一個(gè)類實(shí)例化多少對(duì)象,它的靜態(tài)變量只有一份拷貝妆档。 靜態(tài)變量也被成為類變量僻爽。局部變量能被聲明為static變量。修飾方法(靜態(tài)方法):
Static關(guān)鍵字用來聲明獨(dú)立于對(duì)象的靜態(tài)方法过吻。靜態(tài)方法不能使用類的非靜態(tài)變量进泼。靜態(tài)方法從參數(shù)列表得到數(shù)據(jù)蔗衡,然后計(jì)算這些數(shù)據(jù)。
Final修飾符
- Final變量(常量):
(1)Final變量能被顯式地初始化并且只能初始化一次乳绕。
(2)被聲明為final的對(duì)象的引用不能指向不同的對(duì)象绞惦。
(3)final對(duì)象的引用不能改變,但是對(duì)象本身內(nèi)容可以改變洋措。
(4)Final修飾符通常和static修飾符一起使用來創(chuàng)建類常量济蝉。 - Final方法(最終方法)
類中的Final方法可以被子類繼承,但是不能被子類修改菠发。
聲明final方法的主要目的是防止該方法的內(nèi)容被修改王滤。 - Final類(最終類)
Final類不能被繼承,沒有類能夠繼承final類的任何特性滓鸠。
被final修飾的類中的成員變量雁乡,類變量被隱式聲明為final變量,其值不可被改變糜俗。也就等同于常量踱稍。
final和static修飾的區(qū)別:
- 修飾變量:
(1)final和static可以同時(shí)修飾一個(gè)變量,表示類常量
final static int A = 12悠抹;
(2)final修飾的量為常量珠月,static修飾的變量為類變量 - 修飾方法:
(1)final修飾方法,該方法不可以被修改楔敌,但是可以被重載但不可以被覆寫啤挎。不可以被繼承。
(2)static修飾的方法可以被修改卵凑,繼承庆聘,重載,覆寫氛谜;
Abstract修飾符
- 抽象類:
(1)抽象類不能用來實(shí)例化對(duì)象掏觉,聲明抽象類的唯一目的是為了將來對(duì)該類進(jìn)行擴(kuò)充。
(2)一個(gè)類不能同時(shí)被abstract和final修飾值漫。
(3)如果一個(gè)類包含抽象方法,那么該類一定要聲明為抽象類织盼,否則將出現(xiàn)編譯錯(cuò)誤杨何。
(4)抽象類可以包含抽象方法和非抽象方法。 - 抽象方法
(1)抽象方法是一種沒有任何實(shí)現(xiàn)的方法沥邻,該方法的的具體實(shí)現(xiàn)由子類提供危虱。抽象方法不能被聲明成final和static。
任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法唐全,除非該子類也是抽象類埃跷。
(2)如果一個(gè)類包含若干個(gè)抽象方法蕊玷,那么該類必須聲明為抽象類。抽象類可以不包含抽象方法弥雹。
(3)抽象方法的聲明以分號(hào)結(jié)尾垃帅,例如:public abstract sample();
Synchronized修飾符
(1)Synchronized關(guān)鍵字聲明的方法同一時(shí)間只能被一個(gè)線程訪問
(2)Synchronized修飾符可以應(yīng)用于四個(gè)訪問修飾符。
volatile修飾符
(1)Volatile修飾的成員變量在每次被線程訪問時(shí)剪勿,都強(qiáng)迫從共享內(nèi)存中重讀該成員變量的值贸诚。
(2)當(dāng)成員變量發(fā)生變化時(shí),強(qiáng)迫線程將變化值回寫到共享內(nèi)存厕吉。這樣在任何時(shí)刻酱固,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值。
(3)一個(gè)volatile對(duì)象引用可能是null头朱。
Transient修飾符
(1)序列化的對(duì)象包含被transient修飾的實(shí)例變量時(shí)运悲,java虛擬機(jī)(JVM)跳過該特定的變量。
(2)該修飾符包含在定義變量的語(yǔ)句中项钮,用來預(yù)處理類和變量的數(shù)據(jù)類型扇苞。
public transient int limit = 55; // will not persist
public int b; // will persist