萬物皆對象:類氛魁,抽象類藏姐,接口
類(注重屬性):使用class定義且不含有抽象方法的類
抽象類:使用abstract class定義的類,它可以含有凉蜂,也可以不含有抽象方法琼梆,不可使用private修飾抽象方法,不可實(shí)例化
接口(注重功能):使用interface定義的類(僅包含抽象方法和全局常量)窿吩,不可實(shí)例化
三種類型之間存在下面的繼承規(guī)律:
類茎杂、抽象類可以單繼承(extends)類和抽象類,多繼承(implements)接口纫雁。
接口可以多繼承(extends)接口
另:內(nèi)部類:作用在于可訪問外部類的變量煌往。
非靜態(tài)內(nèi)部類創(chuàng)建實(shí)例:new Out().new In(); ?靜態(tài)內(nèi)部類:new Out().In;
訪問外部類的變量:Out.this.變量
基本特征:封裝、繼承轧邪、多態(tài)
1.封裝:隱藏實(shí)現(xiàn)細(xì)節(jié)刽脖,保護(hù)屬性
2.繼承:共性放入父類->特性放入子類,子類可重寫父類的方法 ?單繼承extends類 多繼承implement接口
3.多態(tài)(動(dòng)態(tài)綁定):運(yùn)行時(shí)多態(tài):子類(實(shí)現(xiàn)類)有重寫(實(shí)現(xiàn))了父類(接口)方法忌愚,實(shí)例指向instanceOf子類(實(shí)現(xiàn)類)
方法的重寫與重載:
重寫:子類覆蓋父類的方法曲管,重新實(shí)現(xiàn),訪問控制權(quán)限不能低于父類硕糊,異吃核可不拋或異常不可比父類拋得更大。
重載:同一個(gè)類里面定義相同方法名的方法(功能類似)简十,返回參數(shù)一樣檬某,傳參列表不同。
轉(zhuǎn)型:向上轉(zhuǎn)型與向下轉(zhuǎn)型 前提是父類的引用指向子類的對象
向上轉(zhuǎn)型:B子類-->A父類 A a = new B(); 自動(dòng)轉(zhuǎn)型
向下轉(zhuǎn)型:A父類-->B子類 B b = (B) a; 強(qiáng)制轉(zhuǎn)換
關(guān)鍵字:this,static,final,abstract,super,synchronize,native,transient
this:類本身
static:靜態(tài)修飾符可修飾:與類有關(guān)螟蝙,與對象無關(guān)
類(靜態(tài)類)
方法(類方法恢恼,類無需實(shí)例化即被分配內(nèi)存,不可訪問非靜態(tài)類方法和變量胶逢,不可使用this和super關(guān)鍵字)
變量(類變量厅瞎,類無需實(shí)例化即被分配內(nèi)存)
代碼塊 static{}
final:終極修飾符 類不可繼承和修改,方法不可被子類覆蓋初坠,變量即為常量和簸,不可變。
abstract:抽象修飾符 類不可被實(shí)例化碟刺;方法只能有定義锁保,不能實(shí)現(xiàn),不能使用static關(guān)鍵字;
有抽象方法的類一定是抽象類爽柒,抽象類不一定有抽象方法吴菠。
super:父類 在子類中使用被覆蓋的父類方法和變量。
final修飾的類不能繼承浩村、方法不能重載做葵,變量(final修飾的變量是常量)可以重載
static修飾的變量、方法心墅、內(nèi)部類酿矢,都可以通過類名直接調(diào)用
static修飾的變量、方法怎燥、內(nèi)部類瘫筐,都可以重載。
synchronize:同步機(jī)制 控制資源的一致性
1.單個(gè)對象的同步铐姚。每個(gè)方法可以同步到不同的對象策肝,對象之間是相互獨(dú)立的:synchronized(obj){}
2.同步到當(dāng)前類實(shí)例對象上:
當(dāng)某一個(gè)方法同步到當(dāng)前的類實(shí)例對象上時(shí),線程只有獲得當(dāng)前類實(shí)例的對象鎖才可以繼續(xù)運(yùn)行隐绵。在方法中之众,兩種方式: ? ? ? ? ? ? ? ? ? ? ? ? a.synchronized(this){} ?b. 修飾方法 eg:public synchronized void methodName(){}
當(dāng)使用一個(gè)靜態(tài)對象作為同步對象時(shí),線程只有獲得當(dāng)前類實(shí)例時(shí)氢橙,才可以繼續(xù)運(yùn)行酝枢,也就是所謂的類鎖。也可以直接獲取當(dāng)前類實(shí)例來作為同步對象悍手。在方法中帘睦,兩種方法:a.synchronized(Xxx.class){} b.synchronized(Class.forName("類名")){}
native:本地 修飾方法,表示調(diào)用非java語言實(shí)現(xiàn)的方法
transient:非串化(序列化) 修飾變量坦康,表示該變量不是該對象串行化(序列化)的一部分竣付。
訪問控制符:private->default->protected->public
private本類訪問
default:本類+同包類可訪問
protected:本類+同包類可訪問+不同包的子類
public:所有都可訪問。