面向对象编程_抽象类与接口

1、抽象类

声明抽象类使用关键字abstract。

抽象类,不能直接被实例化,只能被继承。必须先继承该抽象类,然后再实例化子类。

抽象方法,不能包括具体的功能实现。继承抽象类的子类必须实现抽象类中的所有抽象方法,具体实现根据业务需求有所不同。抽象类中至少要包含一个抽象方法。

如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义为private。

(1)goods.class.php

<?php
/**
 * 定义商品类,使用abstract声明为抽象类
 * 该类提供基础属性$name、$price、构造方法
 */
abstract class goods
{
    public $name;//商品名称
    public $price;//商品价格
    //构造方法,初始化对象的$name和$price属性
    public function __construct($name,$price){
        $this->name=$name;
        $this->price=$price;
    }
    //限制非抽象子类都要实现getName的方法,但是可以不同
    abstract protected function getName();
    /*
    final类,不能被继承,只能被实例化。
    final方法,不能被子类重写。
    */
    //要求每个子类都必须要有相同的返回原始价格的方法
    final public function getPrice(){
        return $this->price;
    }
}

(2)book.class.php

<?php
header('content-type:text/html;charset=utf-8');
//载入goods类文件
require './goods.class.php';
//定义book类,继承goods类
class book extends goods
{
    //由于父类getName方法是抽象方法,因此在这里必须实现
    public function getName(){
        return '书名:《'.$this->name.'》';
    }
}
//实例化book类,book类继承了goods类,具有构造方法,需要传递相关参数
$book=new book('挪威的森林',45);
echo $book->getName();
echo '<hr>';
//父类goods类中getPrice是final方法,无法被重写
echo $book->getPrice();

(3)phone.class.php

<?php
header('content-type:text/html;charset=utf-8');
//载入goods类文件
require './goods.class.php';
//定义phone类,继承goods类
class phone extends goods
{
    //由于父类getName方法是抽象方法,因此在这里必须实现
    public function getName(){
        return '手机型号:'.$this->name;//实现与book类不同
    }
}
//实例化phone类,phone类继承了goods类,具有构造方法,需要传递相关参数
$phone=new phone('meizu',2018);
echo $phone->getName();
echo '<hr>';
//父类goods类中getPrice是final方法,无法被重写
echo $phone->getPrice();

2、接口

声明接口使用关键字interface。

接口中定义的所有方法都必须是抽象的(没有具体的功能实现)公共(public)方法,这是接口的特性。

实现接口使用implements操作符。

类中必须实现接口中定义的所有方法,否则会报一个fatal错误。

如果要实现多个接口,可以用逗号来分隔多个接口的名称。

//使用implements关键字实现usb接口、player接口
class mp3 implements usb,player
{
    //需要实现usb接口、player接口的所有方法
}

(1)定义接口interface.php

<?php
//定义usb接口
interface usb{
    public function connect();//连接
    public function transfer();//传输数据
    public function disconnect();//断开连接
}

(2)实现接口mp3.class.php

<?php
header('content-type:text/html;charset=utf-8');
//载入interface.php文件
require './interface.php';
//使用implements关键字实现usb接口
class mp3 implements usb
{
    public function connect(){
        echo '开始连接<br>';
    }
    public function transfer(){
        echo '开始传输......传输结束<br>';
    }
    public function disconnect(){
        echo '断开连接<br>';
    }
}
//实例化mp3对象
$mp3=new mp3;
//调用接口方法connect()
$mp3->connect();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值