码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类,接口

时间:2016-10-10 01:48:40      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

抽象类

  定义一个公共的基类(base class),而将特定的细节留给继承者来实现.

由于抽象类没有为它所声明的所有方法都定义实现,所以使用new操作符是不可以直接创建它的实例的.要创建实例,就必须创建另一个扩展抽象类的类,并重写所有之前声明的抽象方法原型.通过扩展类,我们就可以创建特殊的对象,而且它们同样能够保证提供一套公共的功能.

说明:方法的原型(prototype)是指方法的定义中剔除了方法体之后的签名.它包括存取级别,函数关键字,函数名和参数,它不包括({})或者括号内部的任何代码.例如 public function prototypeName($protoparam);就是一个i额方法的原型.

抽象类的特点:

  1.某个类只要包含至少一个抽象方法就必须声明为抽象类.

  2.声明为抽象的方法,在实现的时候必须包含相同的或者更低的访问级别.例如,如果某个方法在抽象类中的访问级别是受保护的,在继承类中就必须是受保护的或者公共的,而不能是私有的.

  3.不能使用new关键字创建抽象类的实例.

  4.被声明为抽象的方法不能包含函数体.

  5.如果将扩展的类也声明为抽象的,在扩展抽象类时,就可以不能实现所有的抽象方法.在创建具有层次结构的对象时,这种做法是很有用的.

在类的声明中使用abstract修饰符就可以将某个类声明为抽象的.

技术分享
<?php

abstract class Car{
    //任何基类方法
    abstract function getMaximumSpeed();
}

class FastCar extends Car{
    function getMaximumSpeed(){
        return 150;
    }
}

class Street{
    protected $speedLimit;
    protected $cars;

    public function __construct($speedLimit = 200){
        $this->cars = array(); //对变量进行初始化
        $this->speedLimit = $speedLimit;
    }

    protected function isStreetLegal($car){
        if($car->getMaximumSpeed() < $this->speedLimit){
            return true;
        }else{
            return false;
        }
    }

    public function addCar($car){
        if($this->isStreetLegal($car)){
            echo ‘The Car was allowed on the road.‘;
            $this->car[] =$car;
        }else{
            echo ‘The Car is too fast and was not allowed on the road.‘;
        }
    }
}

$street = new Street();
$street->addCar(new FastCar());
    
    
View Code

  使用抽象类,我们就可以确定所有继承自Car的对象都会实现getMaximumSpeed()方法,从而

共享这个公共的功能.如果继承自Car的类没有定义这个方法,就会导致语法错误,程序也不会允许.

  然而,抽象类也有一些限制.php只支持从一个基类继承,而不支持从两个或者更多的抽象类继承.用接口可以达到相同的目的.

接口

  接口是一种类似于类的结构,可用于声明实现类所必须声明的方法.例如,接口通常用来声明API,而不用定义如何实现这个API.

  虽然接口与抽象类很相似,但是接口只能包含方法原型,而不能包含任何完整定义了的方法.

 

抽象类,接口

标签:

原文地址:http://www.cnblogs.com/gimin/p/5944285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!