1. 程式人生 > >Java面向物件的三個特徵:封裝、繼承、多型

Java面向物件的三個特徵:封裝、繼承、多型

一、封裝

定義

封裝就是將資料或函式等集合在一個個的單元中,通俗來講就是將屬性或方法定義在一個類中

意義

封裝的意義在於保護或者防止程式碼被意外修改。

封裝提供了一個有效的途徑來保護資料不被意外的破壞。將資料的作用域在程式中定義為public改為private在很多方面會更好。私有的資料可以用兩種方式來間接的控制。第一種方法,我們使用傳統的存、取方法。第二種方法我們用屬性(property)。

封裝時的許可權控制符區別如下:
這裡寫圖片描述
作用域使用原則:儘量使用private

/**
 * 封裝
 */
public class Animal {
    //私有化屬性
    private
String name; //私有化方法 private void eat(){ } }

二、繼承

繼承主要實現重用程式碼,節省開發時間。繼承通過extends關鍵字來實現

/**
 * 繼承
 */
public abstract class Animal {

    public abstract void eat();
}

public class Dog extends Animal {
    @Override
    public void eat() {

    }
}

三、多型

定義

同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。

多型的三個條件:
繼承、重寫、父類引用指向子類物件

當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去呼叫子類的同名方法。

多型的好處:可以使程式有良好的擴充套件,並可以對所有類的物件進行通用處理。

多型的實現方式:重寫、介面、抽象類和抽象方法

public class Person {

    private void eat(){
        System.out.println("人吃飯!");
    }
}

public class Chinese extends Person{
    // 重寫父類方法
    public
void eat() { System.out.println("中國人在吃飯!"); } } public class English extends Person{ // 重寫父類方法 public void eat() { System.out.println("英國人在吃飯!"); } } // 測試類 public class TestEat { public static void main(String[] args) { TestEat test = new TestEat(); // 引用指向中國人,建立中國人類物件 Person person1 = new Chinese(); // 此時呼叫的是Chinese的eat()方法 test.showEat(person1); Person person2 = new English(); // 此時呼叫的是English的eat()方法 test.showEat(person2); } // 使用父類作為方法的形參,實現多型 public void showEat(Person person) { // 傳入的是哪具物件就呼叫哪個物件的eat()方法 person.eat(); } }