<?php
//抽象類-可以是空類简肴,不能創(chuàng)建對(duì)象温数,不能實(shí)例化祸穷,只能被繼承
abstract class absFirst{//關(guān)鍵字abstract
protected $absBl = '$absBl'; //可以定義變量,關(guān)鍵字[public|protected|private]
const ABSCL = 'ABS-CL';//可以定義常量
abstract function absFunFirst($cs=array());//抽象方法關(guān)鍵字abstract,可以有參數(shù)臼闻,可以有默認(rèn)值,沒(méi)有方法體
public function absFunSecond(){//可以定義其他成員方法隧膘,關(guān)鍵字[public|protected|private]
echo "抽象類第一個(gè)方法,第一個(gè)變量是“{$this->absBl}”,第一個(gè)常量是“".self::ABSCL."”";
}
}
//接口1-可以是空的接口-不能定義變量-不能定義其他成員方法
interface intFirst{//關(guān)鍵字interface
const INTCLF = 'INT-CLF';//可以定義常量
public function intFunFirst($ic=array());//接口方法關(guān)鍵字public,可以有參數(shù)代态,可以有默認(rèn)值,沒(méi)有方法體
}
//接口2
interface intSecond{
const INTCLS = 'INT-CLS';
public function intFunSecond();
}
//實(shí)現(xiàn)類-定義的抽象方法和接口需全部實(shí)現(xiàn)
//實(shí)現(xiàn)抽象類關(guān)鍵字extends疹吃,單一繼承
//實(shí)現(xiàn)接口關(guān)鍵字implements蹦疑,多接口
class claFirst extends absFirst implements intFirst,intSecond{
//實(shí)現(xiàn)第一個(gè)抽象方法
public function absFunFirst($cf='第一個(gè)抽象方法'){//關(guān)鍵字只能是public,參數(shù)個(gè)數(shù)需保持一致
echo $cf."\n";
}
//重寫(xiě)抽象類中的方法
public function absFunSecond(){
echo '我被重寫(xiě)了'."\n";
}
//實(shí)現(xiàn)第一個(gè)接口的第一個(gè)方法
public function intFunFirst($ic=',哈哈'){//關(guān)鍵字只能是public,參數(shù)個(gè)數(shù)需保持一致
echo '我是第一個(gè)接口方法調(diào)的是第二接口的常量'.self::INTCLS.$ic."\n";
}
//實(shí)現(xiàn)第二個(gè)接口的第一個(gè)方法
public function intFunSecond(){//關(guān)鍵字只能是public,參數(shù)個(gè)數(shù)需保持一致
echo '我是第二個(gè)接口方法調(diào)的是第一接口的常量'.self::INTCLF."\n";
}
}
//使用
$cf = new claFirst();
$cf->absFunFirst();
$cf->absFunSecond();
$cf->intFunFirst();
$cf->intFunSecond();
/*
運(yùn)行結(jié)果:
第一個(gè)抽象方法
我被重寫(xiě)了
我是第一個(gè)接口方法調(diào)的是第二接口的常量INT-CLS互墓,哈哈
我是第二個(gè)接口方法調(diào)的是第一接口的常量INT-CLF
*/
/*
總結(jié):接口是特殊的抽象類
抽象類和接口相同點(diǎn):
1必尼、都可以為空
2蒋搜、都不能創(chuàng)建對(duì)象篡撵,不能被實(shí)例化
3判莉、都可以定義常量
4、定義的抽象方法可以有參數(shù)育谬,可以有默認(rèn)值券盅,沒(méi)有方法體
5、實(shí)現(xiàn)類需實(shí)現(xiàn)定義的所有抽象方法膛檀,且關(guān)鍵字為public
抽象類和接口不同點(diǎn):
1锰镀、類關(guān)鍵字不同abstract && interface
2、抽象類可以定義變量咖刃,接口不可以
3泳炉、抽象類可以定義其他非抽象方法,接口不可以
4嚎杨、抽象類定義的抽象方法關(guān)鍵為abstract花鹅,接口定義的方法關(guān)鍵字為public
5、實(shí)現(xiàn)抽象類只能單一繼承枫浙,關(guān)鍵字為extends刨肃,接口可以實(shí)現(xiàn)多個(gè)接口,關(guān)鍵字為implements
*/
?>