面向對象的語言有五個特色java
<!--一盞電燈是一個程序,燈泡、燈座則爲對象-->編程
<!--父類幾何體,子類圓形、正方形,子類對象都能收到幾何體類型的信息-->瀏覽器
每一個對象都是定義了特性和行爲的某個特定的類
把對象當作服務提供者,有利於造成對象的高內聚
<!--被隱藏的具體實現-->服務器
訪問指定詞併發
定義:以現有類爲基礎,複製出副本,並在副本上修改和添加來建立新類函數
副本類稱爲導出類、繼承類、子類插件
<!--發給基類對象的消息同時也能發給導出類-->線程
使基類和導出類差別的兩個方法設計
泛化:處理類型的層次結構時,不把對象看成特定類型處理,而是做爲基類的對象處理code
<!--好比處理三角形、圓形、矩形,不做爲特殊類處理,而是統一當作形狀,由於都有繪製、移動等方法-->
面向對象程序設計的最重要妙訣:編譯器不可能產生傳統意義上的函數調用,而是採用前期綁定和後期綁定的方法
後期綁定:向對象發送消息時,被調用的代碼直到運行時才能肯定;再運行前,編譯器僅僅確認調用方法的存在、被調用參數和返回值類型檢查
因爲OOP中,動態綁定是默認行爲,因此程序直到運行時才肯定代碼的位置;根據消息來肯定具體調用的代碼,所以是動態的
多態:同一事物在不一樣場景下的多種形態
因爲動態綁定是默認行爲,因此在運行前沒法肯定調用的代碼,所以根據消息來執行後期綁定,實現多態
<!--示例代碼-->
當draw()消息發到一個匿名Shape時,會基於該Shape的實際類型產生正確的行爲
void doSomething(Shape shape){ shape.draw(); shape.rease(); }
Circle circle = new Circle(); Triangle triangle = new Triangle(); Line line = new Line(); doSomething(circle); doSomething(triangle); doSomething(line);
優點
實際開發中,須要選擇合適容器,緣由爲
範型:參數化類型,使用一對尖括號,中間包含類型信息
ArrayList<Shape> shapes = new ArrayList<Shape>();
向下轉型:向下轉型成爲更加具體的類
<!--好比:Circle是Shape的一個類,可是沒法得知某個Object是Shape類仍是Circle類-->
對象的存儲
對象的生命週期
異常處理提供了一種從錯誤狀態進行可靠恢復的途徑