面向對象基礎概念

什么是對象?

  • 對象就是可以看到、感覺到、聽到、觸摸到、嘗到、或聞到的東西。
  • 對象是一個自包含的實體,用一組可識別的特性和行為來標示,客觀世界是由對象和對象之間的聯(lián)系組成的。

什么是類?

  • 就是具有相同的屬性和功能的對象的抽象的集合。
  • 在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。

類與對象的關系

  • 類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象。
  • 而對一類對象的抽象就是類。
  • 類描述了一組有 相同特性 (屬性) 和 相同行為 (方法) 的對象。

訪問類型

private protected public
同一個類中
類的子類中
所有的外部成員

三大特性

1、 封裝

第一、良好的封裝能夠減少耦合
第二、類的內部可以實現(xiàn)自由修改
第三、類具有清晰的對外接口

2、 繼承

對象的繼承代表了一種 is-a 的關系
如果兩個對象 AB 可以表述為 BA,則表明 B 可以繼承 A
比如:貓是動物,則貓類可以繼承動物類

3、 多態(tài)

不同的對象可以執(zhí)行相同的動作,但是要通過他們 自己 的實現(xiàn)代碼來執(zhí)行。
原理:當方法被調用時,無論對象是否被轉化為其父類,都只有位于對象繼承鏈最末端的方法實現(xiàn)會被調用。
* 子類以父類的身份出現(xiàn),比如:兒子代表老子表演,化妝后就是以父親身份出現(xiàn)了
* 子類在工作時要以自己的方式來實現(xiàn),比如:兒子模仿得再好,那也是模仿,兒子只能用自己理解的方式去模仿父親的作品。
* 子類以父類的身份出現(xiàn)時,子類特有的屬性和方法不可以使用。比如:兒子代表父親出演,絕活是不能表示出來的。


什么是抽象方法?

類里面定義的沒有方法體的方法就是抽象方法,聲明抽象方法時還要加一個關鍵字 abstract 來修飾。

abstract function fun1();
abstract function fun2();

什么是抽象類?

抽象類也要使用“abstract”關鍵字來修飾,在抽象類里面可以有不是抽象的方法和成員屬性,但只要有一個方法是抽象的方法,這個類就必須聲明為抽象類,使用 abstract 來修飾。
特性:

  • 抽象類不能實例化
  • 擁有盡可能多的代碼,擁有盡可能少的數(shù)據(jù)。
  • 子類必須把父類中的抽象方法全部都實現(xiàn)。
  • 通常代表一個抽象的概念,他提供一個繼承的出發(fā)點,設計一個新抽象類時,一定是用來繼承的。
  • 特殊的類。
abstract class Demo
{
    var $test;
    abstract function fun1();
    abstract function fun2();
    function fun3()
    {
        ....
    }
}
$demo=new Demo(); //抽象類為能產生實例對象,所以這樣做是錯的,實例化對象交給子類
class Test extends Demo
{
    function fun1()
    {
        ...
    }
    function fun2()
    {
        ...
    }
}
$test=new Test(); //子類可以實例化對象,因為實現(xiàn)了父類中所有抽象方法

什么是接口?

  • 接口里面所有的方法必須都是聲明為抽象方法。
  • 接口里面不能聲明變量,而且接口里面所有的成員都是 public 權限的。所以子類在實現(xiàn)的時候也一定要使
    用 public 權限實現(xiàn),關鍵詞 interface。
  • 一個類只能繼承一個抽象類或普通類,但可實現(xiàn)多個接口,(單繼承,多接口)。
  • 特殊的抽象類。
//定義一個接口使用 interface 關鍵字,“One”為接口名稱
interface One
{
    //因為在接口里面不能用變量成員,所以定義一個常量
    const constant = 'constant value';
    //定義了一個抽象方法”fun1”,因為接口里面所有的方法都是抽象方法,所以在聲明抽象方法的時候就不用像抽象類那樣使用“abstract”。
    public function fun1();
    //定義了抽象方法”fun2”
    public function fun2();
}
//使用 extends 繼承一個類,使用 implements 實現(xiàn)多個接口
class Four extends 類名一 implemtns 接口一, 接口二, ... .
{
    //所有接口中的方法都要實現(xiàn)才可以實例化對象
    ... ... ... ..
}

抽象類與接口的關系

  • 接口是特殊的抽象類。
  • 類是對對象的抽象。
  • 抽象類是對類的抽象。
  • 接口是對行為的抽象。
  • 如果行為跨越不同類的對象,可使用接口;對于一些相似的類對象,用繼承抽象類。
    • 比如:貓、狗它們都是動物,它們之間有很多 相似 的地方,所以我們應讓它們繼承動物這個抽象類。
    • 而飛機、麻雀、超人是完全不相關的類,叮當是動漫的角色,孫悟空是古代神話人物,這也是 不相關 的類,但是他們之間又有 共同點,前三者都會飛,后兩者都會變出東西,所以此時讓他們去實現(xiàn)相同的接口來達到我們設計的目的。
  • 從設計角度講,抽象類是從子類中發(fā)現(xiàn)了公共東西,泛化出父類,然后子類繼承,而接口是根部不知子類的存在,方法如何實現(xiàn)還不確認,預先定義。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評論 18 399
  • 1 面向對象No6 面向對象 OO Object Oriented 編程時以對象為單元,封裝數(shù)據(jù)和邏輯,以此提...
    征程_Journey閱讀 1,258評論 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,806評論 0 11
  • 2017年4月25日,日拱一卒,積硅步,精進未來的自己。 今日剽悍晨讀分享的書是《故事思維》,作者安妮特被 稱為全...
    凡塵花仙子閱讀 354評論 1 5
  • 今朝新潮替舊歲 百鳥飛盡落花脆 憐君徒留空悲戚 一代夢碎一代醉 很認真的看了這部電影,有些許的失望,可能是當初期待...
    路易斯阿呆閱讀 308評論 13 4

友情鏈接更多精彩內容