Java面向對象編程思想

一、面向對象編程是什麼

   面向對象編程(Object Oriented Programming,故常稱OOP)並不是Java獨有,而是一種編程的思想,Java、C++、Python均有對其實現。其本質是以創建模型體現出來的抽象思惟過程和麪向對象的方法。模型是用來反映現實世界中事物特徵的,任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更廣泛、更集中、更深入地描述客體的特徵。經過創建模型而達到的抽象是人們對客體認識的深化。java

二、OOP的優缺點

優勢:易於維護與擴展,代碼複用性高。因爲面向對象有封裝、繼承、多態性的特性,能夠設計出低耦合的系統,使系統更加靈活多變。
缺點:CPU開銷大、佔據資源多編程

三、三大特性

封裝:隱藏對象的屬性和實現細節,僅保留一些對外接口;
繼承:子類能夠繼承父類的屬性和方法;
多態:同一個行爲具備多個不一樣表現形式或形態的能力。ide

3.一、封裝

   使用訪問權限修飾符來實現對屬性和方法的控制,包括private:僅限本類能夠訪問;default(默認權限):僅限本包能夠訪問;protected:僅限包內和繼承的子類能夠訪問;public:都可訪問。
  咱們在定義一個對象類時,一般對屬性進行隱藏,提供公共的set、get方法進行訪問。學習

/**
 * @author RuiMing Lin
 * @date 2020-03-05 16:01
 */
public class Person {

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() { return age; }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3.二、繼承

   繼承可使子類得到父類的全部非私有屬性和方法,減小了代碼的複用。繼承可使對象層次化,類型比較明確。大數據

/**
 * @author RuiMing Lin
 * @date 2020-03-05 18:18
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son("小明",23);
        s.eat();        //從父類繼承的方法
        s.sleep();      //從新父類的方法
        s.study();      //子類本身定義的方法
    }
}

class Father{
    String name;
    int age;

    public Father(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println("吃飯");
    }

    public void sleep(){
        System.out.println("父親睡覺");
    }
}

class Son extends Father{
    public Son(String name, int age) {
        super(name, age);
    }

    @Override
    public void sleep(){
        System.out.println("兒子睡覺");
    }

    public void study(){
        System.out.println("兒子學習");
    }
}

3.三、多態

public abstract class Animal { 
    public abstract void eat(); 
}
class Cat extends Animal { 
    public void eat() { 
        System.out.println("吃魚"); 
    } 
}
class Dog extends Animal { 
    public void eat() { 
        System.out.println("吃骨頭"); 
    } 
}
public class Test { 
    public static void main(String[] args) { 
    // 多態形式,建立對象 
    Cat c = new Cat(); 
    Dog d = new Dog(); 
    // 調用showCatEat 
    showCatEat(c);
    // 調用showDogEat
    showDogEat(d); 
    showAnimalEat(c); 
    showAnimalEat(d); 
}
    public static void showCatEat (Cat c){ 
        c.eat(); 
    }
    public static void showDogEat (Dog d){ 
        d.eat(); 
    }
    public static void showAnimalEat (Animal a){ 
        a.eat(); 
    } 
}

   因爲多態特性的支持,showAnimalEat方法的Animal類型,是Cat和Dog的父類類型,父類類型接收子類對象,能夠把Cat對象和Dog對象傳遞給方法。當eat方法執行時,多態規定,執行的是子類重寫的方法,那麼效果天然與showCatEat、showDogEat方法一致, 因此showAnimalEat徹底能夠替代以上兩方法。不只僅是替代,在擴展性方面,不管以後再多的子類出現,咱們都不須要編寫showXxxEat方法了,直接使用 showAnimalEat均可以完成。 因此,多態的好處,體如今可使程序編寫的更簡單,並有良好的擴展。ui

3.3.一、多態運行規則

  編譯期如果父類(父接口)擁有該方法或類,則使用的IDE不會報錯;運行期則看具體的類型,如果該類該方法或類,則使用的IDE不會報錯。this

  1. 成員變量:編譯期看左邊,運行期看左邊;
  2. 靜態方法:編譯期看左邊,運行期看左邊;
  3. 非靜態方法:編譯期看左邊,運行期看右邊。

四、總結

  面向對象編程思想不一樣於面向過程編程,它的使用更加的嚴格與規範。Java的面向對象編程更是有許多規範,須要對Java學習的更加深刻纔會對它更好的理解。設計

  

有錯誤的地方敬請指出,歡迎你們評論區或者私信交流!每日持續更新Java、Python、大數據技術,請你們多多關注!code

相關文章
相關標籤/搜索