继承和抽象类思想

Posted 辛庚益

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承和抽象类思想相关的知识,希望对你有一定的参考价值。

访问修饰符

  public:公共的,共有的,公开的(可以在“任何位置”使用)

  protected:受保护的(可以在当前类或继承关系中使用)

  private:私有的(只能在其所在的类中访问)

父类关键词

  parent代表父类

父类的使用

   parent::__construct($p1);//调用父类的构造函数来初始化p1

继承关键字

   class 子类 extends 父类 {}

构造方法析构方法在继承中的表现

  子类中没有定义构造方法时,会自动调用父类的构造方法

  可以手动调用 parent::__construct($p1)

优点:节约代码

重写关键字:override

例子

class C{

       function show1($para1){

              echo "<br />父类的show1方法:para1 = " . $para1;

       }

}

class D extends C{

       function show1($para, $para2){//参数不一致

              echo "<br />子类的show1方法";

       }

}

 

重写的基本要求

访问权限

下级的访问控制权限应该不低于上级的访问控制权限:

方法的参数形式

应该跟父类的一致。

最终类关键字final class(最终方法:final method)

用途:不希望对其进行扩展

书写形式:final  class  类名{ }

工厂模式

class factory{

         //Instance表示“实例”,“对象”

         static function getInstance($className){

                   if(file_exists(‘./class/‘ . $className . ".class.php")){

                            $obj1 = new $className();

                            return $obj1;

                   }

                   else{

                            return null;//也可以die();

                   }

         }

}

$obj1 = factory::getInstance("A");//获取类A的一个对象

$obj2 = factory::getInstance("B");//获取类B的一个对象

$obj3 = factory::getInstance("A");//再获取类A的一个对象

 

优点:只需要指定对象就可以创建

单例模式设计

某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。

单例模式的关键点

  1. 设置私有属性
  2. 设置私有构造方法
  3. 设置执行方法
  4. 设置私有拷贝方法

抽象类

关键字:abstract

作用:用于做父类,规范类,不需要实例化

抽象类方法

抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已

即相当于要求下级类去完成该功能(动作),但自己是不做的

重载方法

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”

参数不同可以是:数量个数不同,或类型不同,或顺序不同

例子

class  A{

int  function  f1(int  x){......}

int  function  f1(int  x,  int  y){.....}

int  function  f1(string s   int  m){....}

}

在PHP中重载只是一个概念

属性重载

所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。

如果某属性不存在,但在语法中使用如下情形,则会发生:

取值:$v1 = 对象->属性;                     ===>自动调用类中的__get()方法

赋值:对象->属性 = XX值;                 ===>自动调用类中的__set()方法

判断是否存在:isset(对象->属性;)       ===>自动调用类中的__isset()方法

销毁:unset(对象->属性;)                       ===>自动调用类中的__unset()方法

 

方法重载

关键字:__call

例子:

Function f1(){

         Echo :”f1被调用”

}

Function f2($x,$y){

         Echo :”f2被调用”;

         Return $x+$y;

}

Class a{

         Public $p1=1;

         Function __call($x,$arr){

                   $c=count($array);

                   If($c==0){

                            F1();

}else if(){

         Return f2($arr[0],$arr[1]);

}

}

}

$d=new a();

$d->f1();

$v1=$d->f1(1,2)//f1不存在两个参数

echo "<br />d1里面的p1=" . $d1->p1;

echo "<br />结果v1=" . $v1;

执行结果
f1被调用
f1被调用

o1里面的p1=1
结果v1=3

以上是关于继承和抽象类思想的主要内容,如果未能解决你的问题,请参考以下文章

抽象类和接口的区别

Java编程思想9.接口

Java编程思想之九 接口

Java编程思想 学习笔记9

面向对象设计思想之一(构造器和继承)

抽象类 和 接口类