您现于de位置乃:亚博 > APP类库

亚博 2015-09-20 APP类库 915

类和对象:抽象类 接口

抽象类和接口:抽象类(Abstract Class)与接口(Interface)都乃不能被实例化de特殊类.


抽象类:


抽象类里de抽象方法都乃没有具体实现de空方法.抽象类可以用来为子类设置功能定义 所以抽象类强制开发人员只能从特定de父类来继承 然后于继承de子类中完成所需de具体功能.


定义抽象类de语法格式如下:

abstract class 类名称{
  //抽象类de成员变量列表
  abstract function 成员方法1([参数1] [参数2] ……);
  abstract function 成员方法2([参数1] [参数2] ……);
  //其他代码
}

抽象类与普通类相似 也具有成员属性和成员方法 区别于于抽象类不能被实例化.

 

下面定义1个简单 完整de抽象类:

abstract class MyClass{ //定义抽象类
  abstract protected function myFunction($arg); //定义抽象方法
}

PS:于抽象类de定义中必须至少含有1个使用关键字abstract修饰并且没有任何实现de抽象方法.


抽象类de实现过程:

于抽象类中 不仅可以定义抽象方法 还可以像普通类1样 定义1些能够完成指定功能de成员方法 当子类继承抽象类后 就可以直接引用这些能够完成指定功能de成员方法.

class 子类名称 extends 抽象类名称{
  //子类de成员变量列表
  
  function 抽象方法名称([参数1] [参数2] ……){
      //抽象方法de具体实现
  }
  //其他代码
 }

 PS:当某个类要继承于抽象类时 必须包含该抽象类中定义de所有方法 否则于运行de时候出错.


 下面乃1个实现抽象类de例子:

abstract class Study{
  abstract function printStudy($name,$lang); //定义1个抽象方法
}

class OneStudy extends Study { //定义子类继承于父类
  function printStudy($name,$lang){ //抽象方法de具体实现
      echo $name."正于整理".$lang."……";
  }
 }
 
class TwoStudy extends Study {
  function printStudy($name,$lang){
      echo $name."正于整理".$lang."……";
    }
}
  $first=new OneStudy();
  $first->printStudy("大兵","APP基础知识");
  echo "";
  $second=new TwoStudy();
  $second->printStudy(""","SEO基础知识");

该程序运行结果为:

大兵正于整理APP基础知识……

"谡鞸EO基础知识……


定义接口:

接口乃1组成员方法声明de集合 它只包含1些空de成员方法或者1些类常量 这些空de成员方法将由实现该接口de类去具体实现.

定义接口需要使用关键字 interface, 语法格式如下:

interface 接口名称{
  //类常量列表
  function 成员方法1([参数1] [参数2] ……);
  function 成员方法2([参数1] [参数2] ……);
  //其他代码
}

由于接口不能被实例化 所以接口不存于构造方法和折构方法 它只需要给出1组要实现de成员方法de声明即可.


下面定义1个简单 完整de接口:

interface class MyClass{ //定义接口
  public function myFunction($arg); //定义方法
}


接口de实现过程:

与类相似 接口也可以继承.接口可以继承多个接口 但乃接口不能继承类.实现接口要使用关键字 implements.

于使用类来实现1个接口时 必须至少包含接口中定义de所有方法 否则于运行时出错.


下面乃1个实现接口de例子: 

interface IName{ //定义接口IName
  function setName($name);
  function getName();
  }
  interface IAge{ //定义接口IAge
  function setAge($age);
  function getAge();
  }
  class DaBing implements IName,IAge{ //定义实现接口de类
  private $name;
  private $age;
  function setName($name){
  $this->name=$name;
  }
  function getName(){
  echo "姓名:".$this->name." ";
  }
  function setAge($age){
  $this->age=$age;
  }
  function getAge(){
  echo "年龄:".$this->age;
  }
  }
  $obj=new DaBing();
  $obj->setName("大兵");
  $obj->getName();
  $obj->setAge(25);
  $obj->getAge();

该程序运行结果为:

姓名:大兵 年龄:25


抽象类与接口de区别:

对接口de使用乃通过关键字 implements 来实现de.对抽象类de操作乃通过继承关键字 extends 来实现de.

接口没有数据成员 但乃抽象类有数据成员 抽象类可以实现数据de封闭.

接口没有构造函数 抽象类可以有构造函数.

接口中de方法都乃 public 类型de 而抽象类中de方法可以使用 private protected 或者 public 修饰.

1个类可以同时实现多个接口 1个类却只能继承于1个抽象类.

于接口中不可以有成员方法de实现代码 于抽象类中可以有成员方法de实现代码.

PS:于应用中 如果需要给某1个类添加更多de行为 这时可以定义1个接口把这些行为组合于1起.如果需要对某1个事物de数据和行为进行重用 应该定义1个抽象类封装这些变量和函数.


评论