澳门新葡亰平台游戏网站第十节 抽象方法和抽象类 [10]

面向对象程序通过类的分支布局营造起来. 在单重世襲语言如PHP中,
类的后续是树状的.
二个根类有四个或更加多的子类,再从各样子类世襲出一个或越来越多下一级子类.
当然,大概存在多少个根类,用来实现不相同的功效.
在一个非凡设计的系统中,每种根类都应当有三个平价的接口,
能够被使用代码所运用.
若是大家的采纳代码被设计成与根类一齐坐班,那么它也足以和别的八个从根类世袭出来的子类同盟.抽象方法是就好像子类中平常的不二等秘书技的占位符(占个地点但不起成效卡塔尔国,它与日常方法分裂―未有其余轮代理公司码.
假如类中存在一个或更加的多抽象方法, 那么那些类就成了指雁为羹类.
你无法实例化抽象类. 你必须袭承它们,然后实例化子类.
你也能够把抽象类看成是子类的一个模板.假使你覆写全体的悬空方法,
子类就产生叁个惯常的类. 若无覆写全体办法, 子类仍为画饼充饥的.
假诺三个类中中满含有抽象方法(哪怕独有多少个卡塔尔国, 你一定要评释那个类是空虚的,
在class关键字前加上abstract.注明抽象方法的语法与声Bellamy般方法不一致.
抽象方法的远非像相近方法那样带有在大括号{}中的主体部份,并用分号;来甘休.在例子6.13中,
大家定义了二个包蕴getArea方法的类Shape.
但鉴于不明了形状不容许明确图形的面积,确良大家注明了getArea方法为架空方法.
你不能够实例化叁个Shape对象,但您能够世袭它或在三个表明式中运用它,
就像是例6.13中那样.如若你建设构造了八个独有空虚方法的类,你就定义了一个接口(interface卡塔尔.
为了表明这种景观, PHP中有interface 和implements关键字.
你能够用interface来顶替抽象类,
用implements来取代extends来证实您的类定义或应用三个接口. 举例,
你可以写三个myClass implements myIterface.
那二种艺术能够依个人偏心来选拔./*注: 三种办法即指:1. abstract class
aaa{} (注意aaa中独有空虚方法,未有日常方法State of Qatarclass 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(卡塔尔(قطر‎; file://定义两个华而不实方法 } //abstract child class 抽象子类
abstract class Polygon extends Shape file://多边形 { abstract function
getNumberOfSides(State of Qatar; } //concrete class 实体类 三角形类 class Triangle
extends Polygon { public $base; public $height; public function
getArea(卡塔尔国 file://覆写总结面积方法 { return(($this-base *
$this-heightState of Qatar/2卡塔尔(قطر‎; } public function getNumberOfSides(卡塔尔(قطر‎file://覆写边数计算划办公室法 { 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(State of Qatar; file://创立形状的汇集,放入数组 //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($cState of Qatar;
foreach($myCollection as $sState of Qatar { if($s instanceof Shape卡塔尔(قطر‎file://假设$s是Shape类的实例 { print(“Area: ” . $s-getArea(卡塔尔国 . “brn”卡塔尔(قطر‎; }
if($s instanceof Polygon卡塔尔(قطر‎ { print(“Sides: ” . $s-getNumberOfSides(State of Qatar .
“brn”State of Qatar; } if($s instanceof Color卡塔尔(قطر‎ { print(“Color: $s-namebrn”卡塔尔国; }
print(“brn”); } ?

/*
+——————————————————————————-+
| = 本文为Haohappy读<> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为幸免恐怕发生的无需的难为请勿转发,感激 
| = 接待批评指正,希望和具有PHP爱好者共同提升! 
| = PHP5商讨宗旨: 
+——————————————————————————-+
*/
第十节–抽象方法和抽象类
面向对象程序通过类的分层构造塑造起来. 在单重世袭语言如PHP中, 类的接轨是树状的. 二个根类有三个或更加多的子类,再从各样子类继承出一个或更加多下一流子类. 当然,恐怕存在八个根类,用来落到实处分化的效率. 在八个杰出设计的系统中,每种根类都应有有三个得力的接口, 能够被选用代码所利用. 借使大家的使用代码被设计成与根类一同干活,那么它也能够和其余叁个从根类继承出来的子类协作.
架空方法是就疑似子类中日常的法子的占位符(占个地点但不起功效卡塔尔,它与平时方法差异—未有其余代码. 假诺类中留存三个或更加多抽象方法, 那么这几个类就成了止渴望梅类. 你不可能实例化抽象类. 你必需继续它们,然后实例化子类. 你也得以把抽象类看成是子类的四个模板.
若果您覆写全数的虚幻方法, 子类就改成二个兴致索然的类. 若无覆写全体办法, 子类仍然为空洞的. 假诺三个类中中包涵有抽象方法(哪怕独有二个卡塔尔(قطر‎, 你必须要注解这一个类是架空的, 在class关键字前加上abstract.
宣示抽象方法的语法与声雅培(AbbottState of Qatar般方法差异. 抽象方法的未有像日常方法那样带有在大括号{}中的主体部份,并用分号;来截止.
在例子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
澳门新葡亰平台游戏网站,复制代码
代码如下:   //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(State of Qatar //覆写总结面积方法  
       {  
           return(($this->base * $this->height)/2);  
       }  
       public function getNumberOfSides(State of Qatar //覆写边数总计方法  
       {  
           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() .  
               “
n”);  
       }  
       if($s instanceof Polygon)  
       {  
           print(“Sides: ” .  
               $s->getNumberOfSides() .  
               “
n”);  
       }  
       if($s instanceof Color)  
       {  
           print(“Color: $s->name
n”);  
       }  
       print(“
n”);  
   }  
?>  

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图