抽象类和抽象方法和接口
有些知识,是为了解决某个场景中的难题而生。 了解那个"令人尴尬"的场景,为了解知识点更重要。 1 abstract class aDB{ 2 /** 3 * 参数:sql语句 4 * 返回类型:array 5 **/ 6 abstract public function getAll($sql); 7 abstract public function getRow($sql); 8 } 9 10 class Mysql extends aDB{ 11 public function getAll($sql){ 12 13 } 14 public function getRow($sql){ 15 16 } 17 } 在编程中,有个概念叫"面向接口编程"。 抽象类和方法的特征: ? 1 <?php 2 //多个对象协同?作 3 //饲养员与不同动物表演 4 5 //饲养员 6 class Person{ 7 public $name; 8 public function __construct($name){ 9 $this->name = $name; 10 } 11 public function work($obj){ 12 echo $this->name.‘正在工作<br/>‘; 13 //1.喂养动物 14 15 $obj->eat(); 16 //2.表演 17 $obj->show(); 18 } 19 } 20 //父类里面的方法只是用于保证子类里面有这个方法 21 abstract class Animal{ 22 public function eat(){ 23 echo ‘正在吃东西...<br/>‘; 24 } 25 26 //抽象方法(半成品) 27 abstract public function show(); 28 } 29 //二狗 30 class Dog extends Animal{ 31 public function eat(){ 32 echo ‘狗吃吃吃。。。。<br/>‘; 33 } 34 public function show(){ 35 echo ‘玩球球。。。。<br/>‘; 36 } 37 } 38 //小猫 39 class Cat extends Animal{ 40 public function eat(){ 41 echo ‘吃大雨...<br/>‘; 42 } 43 public function show(){ 44 echo ‘补充耗。。。<br/>‘; 45 } 46 } 47 //猴子 48 class Monkey extends Animal { 49 public function eat(){ 50 echo ‘吃香蕉。。。<br/>‘; 51 } 52 public function play(){ 53 echo ‘玩个蕉...<br/>‘; 54 } 55 public function show(){ 56 echo ‘玩个头...<br/>‘; 57 } 58 } 59 60 //实例化对象 61 $lq = new Person(‘老王‘); 62 $wc = new Dog; 63 $tom = new Cat; 64 $wk = new Monkey; 65 //饲养员在公作 66 //$lq->work($wc); 67 //$lq->work($tom); 68 $lq->work($wk); 总结: 1 <?php 2 abstract class A{ 3 abstract public function eat(); 4 abstract public function say(); 5 } 6 //抽象类必须继承 而且还要完成里面的所有抽象方法 7 abstract class B extends A{ 8 //抽象方法必须被重写 9 public function say(){ 10 } 11 public function eat(){ 12 } 13 //继承的时候还可以追加抽象方法 14 abstract public function he(); 15 } 16 //重写了所有抽象方法的类才算是一个完整的类 才能被实例化 17 class C extends B{ 18 public function he(){ 19 } 20 } 21 $a = new C; 22 var_dump($a); ? 接口抽象类可以理解为"类的模板",接口则是"方法"的模板。 即,接?的粒度更小,用于描述通用的方 /* 比如一个社交网站,关于用户的处理是核心应用. 登陆 退出 写信 看信 招呼 更换?情 吃饭 骂人 捣乱 示爱 撩骚 这么多的方法,都是用户的方法,自然可以写一个user类,全包装起来 但是,分析用户一次性使不了这么方法 用户信息类:{登陆,写信,看信,招呼,更换心情,退出} 用户娱乐类:{登陆,骂人,捣乱,示爱,撩骚,退出} 开发网站前,分析出来这么多方法,但是,不能都装在一个类里,分成了2个类,甚至更多. 作用应用逻辑的开发,这么多的类,这么多的方法,都晕了. */ interface UserBase { public function login($u,$p); public function logout(); } interface UserMsg { public function wirteMsg($to,$title,$content); public function readMsg($from,$title); } interface UserFun { public function spit($to); public function showLove($to); } /* 作为调用者,我不需要了解你的用户信息类,用户娱乐类,我就可以知道如何调用这两个类 因为: 这两个类 都要实现 上述接口. 通过这个接口,就可以规范开发. */ /* 下面这个类,和接口声明的参数不一样,就报错,这样,接口强制统一了类的功能 不管你有几个类,一个类中有几个方法 接口特征: 抽象类与接口的区别抽象类:主要用于双方协作的规范,属于大方向模版。接口:组成事务具体零件的规范,属于具体开发模版。如何选择?如果你仅仅是用于指定这个模块要不要开发,是现在开发还是以后开发,起一个指引作用,要使用接口。如果你在制定大规范,并且涉及各部门之间的配合,要使用抽象类 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |