面試求職中你需要了解的Java面向對象


從畢業到現在,筆試過好多場 也面了好多場, 一直想寫一些東西給找工作的朋友,這篇文章結合個人經歷講解面試中的面向對象.里邊有些實例個人以面試題的形式寫出來,從程序角度去b幫助大家了解學習,最后希望大家找個好工作.

Java面向對象的特征: 抽象、封裝、繼承、多態.

抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面:數據抽象和過程抽象.

封裝:封裝就是對屬性和方法的載體類,只能通過其提供的接口(方法)來訪問,而把實現細節隱藏起來.也就是說,具體實現對程序員來說是透明的,封裝的好處在於對類內部的改變,不會影響到其他代碼.

封裝的做法:

1.私有屬性(private修飾符修飾屬性)

2.提供public的讀(getXX)(setXX)方法。

3.在構造中調用方法.所有的非常量屬性基本都需要封裝.

封裝的好處:

1.隱藏類的實現細節

2.對所有用戶提供統一的接口

3.增強執行效果.

4.易於維護和擴展

繼承:繼承是一種關系,邏輯上滿足子類is a 父類的關系才使用繼承.

子類繼承父類的屬性和非私有方法.不能繼承父類的構造,繼承關鍵字extends,類單繼承,接口多繼承.

在構造子類對象時,依次調用父類的構造(子類默認調用父類的無參構造.可以使用super(參數列表)來調用指定的父類的含參構造)Object為止.再調用子類自身的.

子類調用父類的構造時,父類的構造只能調用一個且必須寫在子類構造的第一句.

【筆試題】類加載時的順序問題:說出下面程序的執行結果

public class Test { public static void main(String[] args) { new B(); System.out.println("--------"); new B(); } } class A{ //靜態代碼塊
    static{ System.out.println("static code block in father"); } //代碼塊
 { System.out.println("code block in father"); } //構造
    public A(){ System.out.println("construction of father"); } } class B extends A{ //靜態代碼塊
    static{ System.out.println("static code block in son"); } //代碼塊
 { System.out.println("code block in son"); } //構造
    public B(){ System.out.println("construction of son"); } }

程序執行結構

static code block in father static code block in son code block in father construction of father code block in son construction of son -------- code block in father construction of father code block in son construction of son

多態:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。

多態的類型

1.基本類型的多態(本質上是基本類型之間的自動類型轉換)

Java語言中將8種數據類型都分別封裝了一個類,這些類中封裝了各基本數據類型的屬性和基本運算.


基本類型自動轉換為對應的封裝類的操作叫做自動裝箱操作,反之叫自動拆箱操作,自動裝箱操作有一個自動裝箱池(范圍為-128~127).只要自動裝箱的數在自動裝箱池范圍內,則直接去池中找數據.

public class TestAutoPool { public static void main(String[] args) { Integer num1 = 127; Integer num2 = 127; System.out.println(num1==num2);//true
        Integer num3 = 128; Integer num4 = 128; System.out.println(num3==num4);//false
 } }

Charater在5.0沒有該自動裝箱池,6.0有自動裝箱池.

byteshortint、long有自己的自動裝箱池,其他基本類型都沒有該自動裝箱池

自動裝箱不會出現錯誤,自動解箱在下面情況下會出錯

Integer num = null; int i = num;//null不能自動解箱

【筆試題】:說出下面程序的執行結果

public class Test { public static void main(String[] args) { short a = 128; byte b = (byte)a; System.out.println("a=" + a + ",b=" + b); } }

程序運行結果:

a=128,b=-128

2.方法的多態(方法的重載、重寫)

a)覆蓋

父類繼承過來的方法對子類不合適時子類可以改變該方法的實現,這種操作叫做方法的重寫/覆蓋(繼承是重寫的前提條件)

重寫的要求:

<1>.方法名、參數列表和返回類型必須相同(5.0以后允許返回子類類型).

<2>.訪問權限可以改但是不允許更小.(即子類的訪問權限要么大於父類的要么相同,不允許小於父類的訪問權限)

<3>.拋出的異常不能更大.

b)重載

方法的重載要求方法名必須相同,參數必須不同(參數個數不同、類型不同、順序不同<(int,String)(String,int)是不一樣的>).返回值類型可以相同可以不相同.

3.類或者接口的多態(父類的引用指向子類的對象)Person p = new Student();

父類的引用指向子類的對象就發生了多態.后果

<1>.只能使用父類中方定義的屬性和方法

<2>.子類中定義的不能直接使用

<3>.子類復寫了父類的方法,此時調用情況根據方法是否static而不同 [static(調用父類),static(調用子類)].

<4>.如果想使用子類中定義的方法,可以強制類型轉換(判斷是否可以轉換,instanceof運算符來判斷對象的類型)

【筆試題】:說出下面程序的執行結果

class A { int a = 1; static int b = 20; int c = 3; double d = 2.0; void show() { System.out.println("Class A: a=" + a + "\td=" + d + "\tc=" + c + "\tb=" + b); } void common(){ System.out.println("Class A: method common()"); } static void execute(){ System.out.println("Class A: method excute()"); } } class B extends A { float a = 3.0f; static int b = 30; int c = 5; String d = "Java program."; void show() { super.show(); System.out.println("Class B: a=" + a + "\td=" + d + "\tc=" + c + "\tb=" +b); } void common(){ System.out.println("Class B: method common()"); } static void execute(){ System.out.println("Class B: method execute()"); } public static void main(String[] args) { A a = new B(); a.show(); System.out.println("----------------------"); a.common(); System.out.println("----------------------"); a.execute(); } }

程序運行結果

Class A: a=1    d=2.0    c=3    b=20 Class B: a=3.0    d=Java program.    c=5    b=30
---------------------- Class B: method common() ---------------------- Class A: method excute()

4.傳參時的多態(基本類型的多態與類類型的多態混合使用)

轉載請注明出處:[http://www.cnblogs.com/dennisit/p/3590664.html]

在線交談


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM