三大特徵是:封裝、繼承和多態。
封裝:是指將某事物的屬性和行爲包裝到對象中,這個對象只對外公佈須要公開的屬性和行爲,而這個公佈也是能夠有選擇性的公佈給其它對象。
繼承:是子對象能夠繼承父對象的屬性和行爲,亦即父對象擁有的屬性和行爲,其子對象也就擁有了這些屬性和行爲。
多態性:是指容許不一樣類的對象對同一消息做出響應。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。java
封裝是將對象的信息隱藏在對象內部,禁止外部程序直接訪問對象內部的屬性和方法。
java封裝類經過三個步驟實現:安全
經過封裝與組合來設計,具備「高內聚,低耦合」的特色。好比A類裏有B類的引用,則A的實例對象就能夠當作B的實例對象組合而成。函數
protected這個修飾符,各大參考書都會這樣說:訪問權限爲類內,包內和子類,所以在父類中定義的方法和成員變量若是爲protected修飾的,同包中任意訪問,只有父類聲明爲public時不一樣包的子類也能夠訪問。this
將當前對象克隆,保護方法,實現對象的淺複製,只有實現了Cloneable接口才能夠調用該方法,不然拋出CloneNotSupportedException異常。線程
主要是JAVA裏除了8種基本類型傳參數是值傳遞,其餘的類對象傳參數都是引用傳遞,咱們有時候不但願在方法裏講參數改變,這是就須要在類中複寫clone方法。設計
得到當前的類對象code
獲得表明這個對象的字符串,通常子類都有覆蓋。對象
對象被釋放時使用,由於沒法肯定該方法何時被調用,不多使用。blog
判斷兩個引用是否指向同一個對象,其參數不能爲普通數據類型繼承
獲得表明對象的一個整數,這個整數在應用程序運行時保持不變
應用於線程同步中的線程等待
wait方法就是使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具備該對象的鎖。wait()方法一直等待,直到得到鎖或者被中斷。wait(long timeout)設定一個超時間隔,若是在規定時間內沒有得到鎖就返回。
調用該方法後當前線程進入睡眠狀態,直到如下事件發生。
其餘線程調用了該對象的notify方法。
其餘線程調用了該對象的notifyAll方法。
其餘線程調用了interrupt中斷該線程。
時間間隔到了。
此時該線程就能夠被調度了,若是是被中斷的話就拋出一個InterruptedException異常。
用於線程同步中喚醒等待的線程
用於線程同步中喚醒等待的全部線程
方法名稱相同,參數類型或個數不一樣,能夠當作重載的方法是一個方法的兩種實現,僅有返回類型不一樣,則編譯不能經過
子類和父類的方法必須是實例方法,若是父類是static方法而子類不是實例方法,或者相反都會報錯。
若是父類和子類都是static方法,那麼子類重寫或者覆蓋父類方法。
封裝使得內部實現對用戶隱藏,有利於安全操做,繼承能夠實現對象之間的共性與特性,多態性更貼近人的使用習慣,使程序更方便。
class Dis { int val; public Dis(int con_val){ val = con_val; } public void monitor() { System.out.println("the value of Src has changed"); } } class Src{ Dis dis;//組合dis int value; public Src(Dis con_dis) { value = con_dis.val >= 0 ? con_dis.val : 0;//保證value非負 this.dis=con_dis;//Src對象中擁有了Dis對象的引用 } public void valueChange() { for (int i = 0; i < 2; i++) { int oldvalue = value; value += i; if (oldvalue != value){ dis.monitor();//只改變了一次 } } } } public class test { public static void main(String[] args) { Dis dis=new Dis(666); Src src=new Src(dis);//建立src對象,並將src對象做爲參數傳入 src.valueChange();//the value of Src has changed } }
之後有補充再來改~~~