1. 程式人生 > >面向對象4大特性

面向對象4大特性

沒有 調用 統一 n) 部分 函數 xtend body style

面向對象4大特性:抽象,封裝,繼承,多態。

抽象:在類的設計層次:將某些事務的共同屬性提取出來集合到一個類;類與對象之間的關系:類時抽象的,對象是具體的,類是對象的模板,對象的創建時以類未模板的,同一個類創造出來的對象具有共同的屬性,但屬性值不同。

封裝:利用抽象數據類型將數據和基於數據的操作封裝在一起(事物的屬性和方法),數據被保護在抽象數據類型的內部,盡可能地隱藏內部的細節,只保留一些對外接口使之與外部發生聯系。系統的其他部分只有通過包裹在數據外面的被授權的操作來與這個抽象數據類型交流與交互。

繼承:繼承是在父類、子類之間共享屬性、方法的機制,提高代碼的復用性。繼承後子類擁有父類的部分屬性和方法(私有屬性不能繼承,構造函數不能繼承),子類可另外擴展屬於自己的屬性和方法,實現功能擴展。

多態:以封裝和繼承未基礎,在抽象的層面上實施一個統一的行為,到個體(具體)的層面上時,這個統一的行為會因為個體(具體)的形態特征而實施自己的特征行為。(針對一個抽象的事,對於內部個體又能找到其自身的行為去執行。)相同的事物,調用其相同的方法,參數也相同時,但表現的行為卻不同。常見多態形式:重寫和重載。

代碼示例

貓,狗等都是寵物,他們都有共同的屬性和方法:昵稱(name),年齡(age),玩耍( play() )

pet類是所有寵物共同屬性的集合

public class Pet {
    public String name;
    public int age;

    
public Pet() { } public Pet(String name, int age) { this.name = name; this.age = age; } public void play() { System.out.println(this.name + "正在玩"); } }

Dog類,繼承Pet類

繼承了Pet類的public屬性,重寫了play()方法,重載了play方法。

public class Dog extends Pet {
    
public Dog(String name, int age) { super(); this.name = name; this.age = age; }
     @Override
public void play() { System.out.println(this.name + "狗狗正在玩皮球"); } public void play(String action) { System.out.println(this.name + "在" + action); } }

Cat類:繼承Pet類,重寫play()方法

public class Cat extends Pet {
    public Cat(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public void play() {
        System.out.println(this.name + "小貓正在玩線團");
    }
}

main類

public class Test {
    public static void main(String args[]) {

        Pet pet = new Dog("大黃", 3);//實例化一個pet對象
        pet.play();
//        pet.play("sss"); // 錯誤,pet沒有play(String action)方法
        Dog dog = (Dog) pet; //向下轉型
        dog.play();
        dog.play("搖尾巴");//擴展功能,重載play,只關心結果,不關心怎麽處理
        Cat cat = new Cat("粉紅", 2);
        cat.play();
    }
}

輸出結果

技術分享圖片

附:權限修飾符作用範圍

本類 同包(子類或無關類) 不同包(子類) 不同包(非子類)
private Y
默認 Y Y
protected Y Y Y
public Y Y Y Y

面向對象4大特性