PHP类中的抽象类,抽象方法,abstract

来源:互联网 发布:微软软件授权许可协议 编辑:程序博客网 时间:2024/05/18 06:05

就是一个不能实例化(不能new)的类。

定义形式:

abstract  class  类名{

//跟之前一样,定义类的成员就行

}



为什么需要这样一个“抽象类”——它不能实例化对象。

请看如下代码:




可见:

抽象类的目的不是为了得到一个自己的对象,而是为了“后代类”服务,给后代类提供一定的属性和方法。


再看一个具体一点的应用场景:




抽象方法,就是一个“啥也不做”的方法:

定义形式:

abstract  function  方法名(形参1,形参2,... );

可见:

1,抽象方法,只定义方法头,没有大括号部分的方法体;

2,可以看到,该方法实际上没有任何可执行的代码,自然并不能做任何事情;

3,该方法是“专用于被覆盖(重写)”;——实际上,抽象方法,是要求下级必须重写。




可见:

这种抽象类,抽象方法,其实目的是:设计上级类的人(程序员),要求设计下级类的人(成员),必须是做到哪些事情,但又不规定怎么做。


抽象类和抽象方法的一些要求


l 1,一个抽象方法,必须放在抽象类中。

l 2,但:一个抽象类中,可以没有抽象方法——实际应用中,其实很少见。

l 3,下级类必须去“重写”上级类中的抽象方法,并给定具体实现代码(即该方法有方法体);

——但如果下级类本身又是抽象类,就可以不这么做——当然,做(去实现)也可以。

l 4,下级类实现上级类的抽象方法的时候,也要遵循如下原则:

n a,访问修饰符的范围不能更小;

n b,方法的参数跟上级类定义的保持一致;

n ——其实上两条要求是“重写”的要求,而这里,其实本质就是重写。

 

 

其代码原理如下:

abstract  class A{

public $p1;

abstrct function f1();

}

 

class B extends A{

function f1(){ ... }

}

 

abstract class C extends A{

public $p2;

function f2(){ .... }

abstrct function f3();

}

这样,

B必须是实现f1(),

而:

C可以不实现f1(),也可以实现;

如果C没有实现f1()则:

C的后代类也得去实现f1(),还得去实现f3()




原创粉丝点击