1.面向對象html
面向對象是一種思想,是基於面向過程而言的,就是說面向對象是將功能等經過對象來實現,將功能封裝進對象之中,讓對象去實現具體的細節,咱們由之前過程的執行者,變成了指揮者。java
舉例來講:就是:好比說你要去飯店吃飯,你只須要飯店,找到飯店的服務員,跟她說你要吃什麼,而後就會給你作出來讓你吃,你並不須要知道這個飯是怎麼錯作的,你只須要面向這個服務員,安全
告訴他你要吃什麼,而後他也只須要面向你吃完收到錢就好,不須要知道你怎麼對這個飯進行吃。函數
特色:post
1:將複雜的事情簡單化。this
2:面向對象將之前的過程當中的執行者,變成了指揮者。url
3:面向對象這種思想是符合如今人們思考習慣的一種思想。spa
二、面向對象的三大特徵:封裝,繼承、多態.net
1.封裝:只隱藏對象的屬性和實現細節,僅對外提供公共訪問方式code
好處:將變化隔離、便於使用、提升複用性、提升安全性
原則:將不須要對外提供的內容隱藏起來;把屬性隱藏,提供公共方法對其訪問
2.繼承:提升代碼複用性;繼承是多態的前提
注:
①子類中全部的構造函數都會默認訪問父類中的空參數的構造函數,默認第一行有super();若無空參數構造函數,子類中需指定;另外,子類構造函數中可本身用this指定自身的其餘構造函數。
3.多態是父類或接口定義的引用變量能夠指向子類或具體實現類的實例對象
好處:提升了程序的擴展性
弊端:當父類引用指向子類對象時,雖提升了擴展性,但只能訪問父類中具有的方法,不可訪問子類中的方法;即訪問的侷限性。
前提:實現或繼承關係;覆寫父類方法。
2.hashCode 和equals 的 區別
hashCode()方法和equal()方法的做用其實同樣,在Java裏都是用來對比兩個對象是否相等一致,那麼equal()既然已經能實現對比的功能了,爲何還要hashCode()呢?
由於重寫的equal()裏通常比較的比較全面比較複雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就能夠了,效率很高,那麼hashCode()既然效率這麼高爲何還要equal()呢?
由於hashCode()並非徹底可靠,有時候不一樣的對象他們生成的hashcode也會同樣(生成hash值得公式可能存在的問題),因此hashCode()只能說是大部分時候可靠,並非絕對可靠,因此咱們能夠得出:
1.equal()相等的兩個對象他們的hashCode()確定相等,也就是用equal()對比是絕對可靠的。
2.hashCode()相等的兩個對象他們的equal()不必定相等,也就是hashCode()不是絕對可靠的。
全部對於須要大量而且快速的對比的話若是都用equal()去作顯然效率過低,因此解決方式是,每當須要對比的時候,首先用hashCode()去對比,若是hashCode()不同,則表示這兩個對象確定不相等(也就是沒必要再用equal()去再對比了),若是hashCode()相同,此時再對比他們的equal(),若是equal()也相同,則表示這兩個對象是真的相同了,這樣既能大大提升了效率也保證了對比的絕對正確性!
3.抽象類
抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用做子類的超類。抽象類是被用來建立繼承層級裏子類的模板。
public
abstract
class
GenericServlet
implements
Servlet, ServletConfig, Serializable {
// abstract method
abstract
void
service(ServletRequest req, ServletResponse res);
void
init() {
// Its implementation
}
// other method related to Servlet
}
當HttpServlet類繼承GenericServlet時,它提供了service方法的實現:
public
class
HttpServlet
extends
GenericServlet {
void
service(ServletRequest req, ServletResponse res) {
// implementation
}
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
// some other methods related to HttpServlet
}
抽象類的特色:
1,抽象方法必定在抽象類中。
2,抽象方法和抽象類都必須被abstract關鍵字修飾。
3,抽象類不能夠用new建立對象。由於調用抽象方法沒意義。
4,抽象類中的抽象方法要被使用,必須由子類複寫起全部的抽象方法後,創建子類對象調用。
若是子類只覆蓋了部分抽象方法,那麼該子類仍是一個抽象類。
接口中引入默認方法和靜態方法,以此來減小抽象類和接口之間的差別。如今,咱們能夠爲接口提供默認實現的方法了而且不用強制子類來實現它。