æ½è±¡ç±»ä¸æ¥å£ç´§å¯ç¸å
³ï¼å®ä»¬ä¸è½ç¤ºä¾åï¼å¹¶ä¸å¸¸å¸¸é¨åå®ç°ææ ¹æ¬ä¸å®ç°ãæ½è±¡ç±»åæ¥å£ä¹é´çä¸ä¸ªä¸»è¦å·®å«æ¯ï¼ç±»å¯ä»¥å®ç°æ é个æ¥å£ï¼ä½ä»
è½ä»ä¸ä¸ªæ½è±¡ï¼æä»»ä½å
¶ä»ç±»åï¼ç±»ç»§æ¿ãä»æ½è±¡ç±»æ´¾ççç±»ä»å¯å®ç°æ¥å£ãå¯ä»¥å¨å建ç»ä»¶æ¶ä½¿ç¨æ½è±¡ç±»ï¼å 为å®ä»¬ä½¿æ¨å¾ä»¥å¨æäºæ¹æ³ä¸æå®ä¸å级åè½ï¼ä½ç´å°éè¦è¯¥ç±»çç¹å®å®ç°ä¹åæå®ç°å
¶ä»æ¹æ³ãæ½è±¡ç±»ä¹å¶å®çæ¬ï¼å 为å¦æå¨æ´¾çç±»ä¸éè¦éå åè½ï¼åå¯ä»¥å°å
¶æ·»å å°åºç±»èä¸ä¸æ代ç ã
å¨ Visual Basic ä¸ï¼æ½è±¡ç±»ç¨ MustInherit å
³é®å表示ãå¨ C# ä¸ï¼åä½¿ç¨ abstract 修饰符ãä»»ä½æè°ä¸åçæ¹æ³é½å¯ä»¥ç¼ç è³åºç±»ä¸ï¼ä½å¨ Visual Basic ä¸ï¼ä»»ä½è¦å®ç°çæ¹æ³é½ç¨ MustOverride 修饰符æ è®°ãå¨ C# ä¸ï¼è¿äºæ¹æ³æ 记为 abstractã
ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
æ½è±¡æ¹æ³åæ½è±¡ç±»
é¢å对象ç¨åºéè¿ç±»çåå±ç»ææ建起æ¥. å¨åé继æ¿è¯è¨å¦phpä¸, ç±»ç继æ¿æ¯æ ç¶ç. ä¸ä¸ªæ ¹ç±»æä¸ä¸ªææ´å¤çåç±»,åä»æ¯ä¸ªå类继æ¿åºä¸ä¸ªææ´å¤ä¸ä¸çº§åç±». å½ç¶,å¯è½åå¨å¤ä¸ªæ ¹ç±»,ç¨æ¥å®ç°ä¸åçåè½. å¨ä¸ä¸ªè¯å¥½è®¾è®¡çä½ç³»ä¸,æ¯ä¸ªæ ¹ç±»é½åºè¯¥æä¸ä¸ªæç¨çæ¥å£, å¯ä»¥è¢«åºç¨ä»£ç æ使ç¨. å¦ææ们çåºç¨ä»£ç 被设计æä¸æ ¹ç±»ä¸èµ·å·¥ä½,é£ä¹å®ä¹å¯ä»¥åä»»ä½ä¸ä¸ªä»æ ¹ç±»ç»§æ¿åºæ¥çåç±»åä½.
æ½è±¡æ¹æ³æ¯å°±ååç±»ä¸ä¸è¬çæ¹æ³çå ä½ç¬¦(å 个å°æ¹ä½ä¸èµ·ä½ç¨),å®ä¸ä¸è¬æ¹æ³ä¸åâ没æä»»ä½ä»£ç . å¦æç±»ä¸åå¨ä¸ä¸ªææ´å¤æ½è±¡æ¹æ³, é£ä¹è¿ä¸ªç±»å°±æäºæ½è±¡ç±». ä½ ä¸è½å®ä¾åæ½è±¡ç±». ä½ å¿
须继æ¿å®ä»¬,ç¶åå®ä¾ååç±». ä½ ä¹å¯ä»¥ææ½è±¡ç±»çææ¯åç±»çä¸ä¸ªæ¨¡æ¿.
å¦æä½ è¦åææçæ½è±¡æ¹æ³, å类就åæä¸ä¸ªæ®éçç±». å¦æ没æè¦åæææ¹æ³, åç±»ä»æ¯æ½è±¡ç. å¦æä¸ä¸ªç±»ä¸ä¸å
å«ææ½è±¡æ¹æ³(åªæåªæä¸ä¸ª), ä½ å¿
须声æè¿ä¸ªç±»æ¯æ½è±¡ç, å¨classå
³é®ååå ä¸abstract.
声ææ½è±¡æ¹æ³çè¯æ³ä¸å£°æä¸è¬æ¹æ³ä¸å. æ½è±¡æ¹æ³ç没æåä¸è¬æ¹æ³é£æ ·å
å«å¨å¤§æ¬å·{}ä¸ç主ä½é¨ä»½,并ç¨åå·;æ¥ç»æ.
å¨ä¾å6.13ä¸, æ们å®ä¹äºä¸ä¸ªå«ægetareaæ¹æ³çç±»shape. ä½ç±äºä¸ç¥éå½¢ç¶ä¸å¯è½ç¡®å®å¾å½¢çé¢ç§¯,ç¡®è¯æ们声æäºgetareaæ¹æ³ä¸ºæ½è±¡æ¹æ³. ä½ ä¸è½å®ä¾åä¸ä¸ªshape对象,ä½ä½ å¯ä»¥ç»§æ¿å®æå¨ä¸ä¸ªè¡¨è¾¾å¼ä¸ä½¿ç¨å®, å°±åä¾6.13ä¸é£æ ·.
å¦æä½ å»ºç«äºä¸ä¸ªåªææ½è±¡æ¹æ³çç±»,ä½ å°±å®ä¹äºä¸ä¸ªæ¥å£(interface). 为äºè¯´æè¿ç§æ
åµ, phpä¸æinterface åimplementså
³é®å. ä½ å¯ä»¥ç¨interfaceæ¥ä»£æ¿æ½è±¡ç±», ç¨implementsæ¥ä»£æ¿extendsæ¥è¯´æä½ çç±»å®ä¹æ使ç¨ä¸ä¸ªæ¥å£. ä¾å¦, ä½ å¯ä»¥åä¸ä¸ªmyclass implements myiterface. è¿ä¸¤ç§æ¹æ³å¯ä»¥ä¾ä¸ªäººåç±æ¥éæ©.
/*注:
两ç§æ¹æ³å³æ:
1. abstract class aaa{} (注æaaaä¸åªææ½è±¡æ¹æ³,没æä¸è¬æ¹æ³)
class bbb extends aaa{} (å¨bbbä¸è¦åaaaä¸çæ½è±¡æ¹æ³)
2. interface aaa{}
class bbb implements aaa{} (å¨bbbä¸è¦åaaaä¸çæ½è±¡æ¹æ³)
*/
listing 6.13 abstract classes
<?php
//abstract root class æ½è±¡æ ¹ç±»
abstract class shape
{
abstract function getarea(); //å®ä¹ä¸ä¸ªæ½è±¡æ¹æ³
}
//abstract child class æ½è±¡åç±»
abstract class polygon extends shape //å¤è¾¹å½¢
{
abstract function getnumberofsides();
}
//concrete class å®ä½ç±» ä¸è§å½¢ç±»
class triangle extends polygon
{
public $base;
public $height;
public function getarea() //è¦å计ç®é¢ç§¯æ¹æ³
{
return(($this->base * $this->height)/2);
}
public function getnumberofsides() //è¦åè¾¹æ°ç»è®¡æ¹æ³
{
return(3);
}
}
//concrete class å®ä½ç±»å边形
class rectangle extends polygon
{
public $width;
public $height;
public function getarea()
{
return($this->width * $this->height);
}
public function getnumberofsides()
{
return(4);
}
}
//concrete class å®ä½ç±» åå½¢
class circle extends shape
{
public $radius;
public function getarea()
{
return(pi() * $this->radius * $this->radius);
}
}
//concrete root class å®ä¹ä¸ä¸ªé¢è²ç±»
class color
{
public $name;
}
$mycollection = array(); //建ç«å½¢ç¶çéå,æ¾å
¥æ°ç»
//make a rectangle
$r = new rectangle;
$r->width = 5;
$r->height = 7;
$mycollection[] = $r;
unset($r);
//make a triangle
$t = new triangle;
$t->base = 4;
$t->height = 5;
$mycollection[] = $t;
unset($t);
//make a circle
$c = new circle;
$c->radius = 3;
$mycollection[] = $c;
unset($c);
//make a color
$c = new color;
$c->name = "blue";
$mycollection[] = $c;
unset($c);
foreach($mycollection as $s)
{
if($s instanceof shape) //å¦æ$sæ¯shapeç±»çå®ä¾
{
print("area: " . $s->getarea() .
"<br>n");
}
if($s instanceof polygon)
{
print("sides: " .
$s->getnumberofsides() .
"<br>n");
}
if($s instanceof color)
{
print("color: $s->name<br>n");
}
print("<br>n");
}
温馨提示:答案为网友推荐,仅供参考