什么是對象?
- 對象就是可以
看到、感覺到、聽到、觸摸到、嘗到、或聞到的東西。 - 對象是一個自包含的實體,用一組可識別的特性和行為來標示,客觀世界是由對象和對象之間的聯(lián)系組成的。
什么是類?
- 就是具有相同的屬性和功能的對象的
抽象的集合。 - 在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。
類與對象的關系
- 類與對象的關系就如模具和鑄件的關系,類的實例化
結果就是對象。 - 而對一類對象的
抽象就是類。 - 類描述了一組有
相同特性(屬性) 和相同行為(方法) 的對象。
訪問類型
| private | protected | public | |
|---|---|---|---|
| 同一個類中 | √ | √ | √ |
| 類的子類中 | √ | √ | |
| 所有的外部成員 | √ |
三大特性
1、 封裝
第一、良好的封裝能夠減少耦合
第二、類的內部可以實現(xiàn)自由修改
第三、類具有清晰的對外接口
2、 繼承
對象的繼承代表了一種
is-a的關系
如果兩個對象A和B可以表述為B是A,則表明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)還不確認,預先定義。