Java面試題(一):面向對象


1. 面向對象

1.1 什么是面向對象

面向對象是一種思想,是基於面向過程而言的,就是說面向對象是將功能等通過對象來實現,將功能封裝進對象之中,讓對象去實現具體的細節。

對比面向過程,是兩種不同的處理問題角度。

面向過程更注重事情的每一步驟和順序,而面向對象更注重事情有哪些參與者(對象)、以及各自需要做些什么。

例如:冰箱裝大象

面向過程會將任務分解成一系列的步驟(函數):

1. 打開冰箱

2. 把大象裝進去

3. 關上冰箱

面向對象會分解成兩個對象:

冰箱: 存放大象 打開冰箱 關上冰箱

大象 : 進入冰箱

從這個例子可以看出,面向過程比較直接高效,而面向對象更易於復用、擴展和維護。

1.2 面向對象三大特性

談到面向對象了就不能不談Java面向對象的三大特性了。

分別是封裝、基礎和多態。

1.2.1 封裝

封裝是一個面向對象的術語,其含義其實很簡單,就是把東西包裝起來。封裝的意義在於明確標識出允許外部使用的所有成員方法和數據。

將類的某些信息隱藏在類的內部,不允許外部程序直接訪問,並通過該類提供的方法來實現對隱藏信息的操作和訪問。(簡單的說就是隱藏對象的信息,留出訪問的接口)。

特點:1.只能通過規定的方法訪問數據;2.隱藏類的實例細節,方便修改和實現。

例如:

javabean的屬性私有,提供get/set方法對外訪問,因為屬性的賦值或者獲取邏輯只能由javabean本身決定。而不能由外部胡亂修改。

1.2.2 繼承

在Java中就是創建一個父類,用 extends 關鍵字繼承。

在現實中就是兒子繼承父親財產這種。

繼承可以理解為一個類從另一個類獲取方法和屬性的過程。如果類B繼承於類A,那么B就擁有A的方法和屬性,可以直接使用。

例如:

父類為狗類,有年齡、體型這些屬性,還有吃飯、睡覺等特性。

子類繼承父類的這些特性,然后進行專項訓練,訓練導盲的能力成為導盲犬,訓練追查毒品的能力成為緝毒犬。

它們都有從父類繼承下來的屬性和特性,也有后天訓練出來的專業技能。

總結:子類共性的方法或者屬性總結使用父類的,而不需要自己再定義,只需要擴展自己的個性化方法。

1.2.3 多態

什么是多態?

多態就是多種形態。在自然界中碳的多態就有石墨、鑽石等,水分子的多態就有水、冰、水蒸氣等。同一個操作,由於條件的不同,產生的結果也不同。

在Java中,就是基於對象所屬類的不同,外部對同一個方法的調用,實際執行邏輯不同。

想要使用多態,就要用上繼承、方法重寫,用父類引用指向子類對象。

父類對象 變量名 = new 子類對象();
變量名.方法名();

我們在使用的時候 只需要改變子類對象,就可以實現不同的效果,實際開發中多用於接口,例如常用的數據庫操作接口,完成增刪改查等效果。

也舉一個栗子吧:

// 父類 動物類
class Animal {
    public void eat(){
        System.out.println("吃飯");
    }
}
//子類 狗類
class Dog extends Animal {
    public void eat(){
        System.out.println("狗吃肉");
    }
    public void lookDoor(){
        System.out.println("狗看門");
    }
}
//子類 貓類
class Cat extends Animal {
    public void eat(){
        System.out.println("貓吃魚");
    }
    public void atchingMice(){
        System.out.println("貓抓老鼠");
    }
}

class DuoTaiDemo {
    public static void main(String[] args) {
        //定義為狗
        Animal animal = new Dog();
        animal.eat();
        // 無法調用子類特有功能 也就是說我們只能調用父類中有的方法
//        animal.lookDoor();
        System.out.println("-------------------------------");
        // 還原成狗
        Dog dog = (Dog)animal;
        dog.eat();
        dog.lookDoor();
        System.out.println("-------------------------------");
        // 變成貓
        animal = new Cat();
        animal.eat();
        System.out.println("-------------------------------");
        // 還原成貓
        Cat cat = (Cat)animal;
        cat.eat();
        cat.atchingMice();
        System.out.println("-------------------------------");
    }
}

我們無法調用子類特有功能

 

需要注意的幾個點:

不能用子類new父類,例如狗是動物,但動物不是狗。

不能用子類new子類,例如貓不是狗,狗不是貓。

左邊要是大類型,右邊是小類型。


免責聲明!

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



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