java基礎面試 2

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,抽象類中的抽象方法要被使用,必須由子類複寫起全部的抽象方法後,創建子類對象調用。
    若是子類只覆蓋了部分抽象方法,那麼該子類仍是一個抽象類。

抽象類和接口的對比  

何時使用抽象類和接口

  • 若是你擁有一些方法而且想讓它們中的一些有默認實現,那麼使用抽象類吧。
  • 若是你想實現多重繼承,那麼你必須使用接口。因爲Java不支持多繼承,子類不可以繼承多個類,但能夠實現多個接口。所以你就可使用接口來解決它。
  • 若是基本功能在不斷改變,那麼就須要使用抽象類。若是不斷改變基本功能而且使用接口,那麼就須要改變全部實現了該接口的類。

Java8中的默認方法和靜態方法

接口中引入默認方法和靜態方法,以此來減小抽象類和接口之間的差別。如今,咱們能夠爲接口提供默認實現的方法了而且不用強制子類來實現它。

相關文章
相關標籤/搜索