PHP基础OOP(二) 多态

PHP 基础  多态 
====================
多态是一种思想:从一个基类中派生,响应一个虚命令,产生不同的结果。
                不同的对象执行相同的方法而产生不同的行为和结果
例如:很多植物都有开花和结果的特点,但是不同的植物开的花和结的果都不相同

实现多态的好处:
    把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,
    写出通用的代码,做出通用的编程,以适应需求的不断变化。

多态的设计原则:
        依赖于抽象,而不依赖于具体,增加灵活性和扩展性。
        对外开放,对内封闭

实现多态的方式:
    方法的重写与重载、抽象类、接口、继承、虚方法


抽象类:abstract 修饰
    1.抽象类不能被实例化
    2.一个方法如果是抽象方法,那么所在的类必须是抽象类
    3.抽象方法:abstract修饰,没有实现,即没有方法体
    4.非抽象类继承抽象类必须实现抽象类的所有抽象方法
    5.抽象类与普通类之间是继承 extends

接口:interface 修饰
    1.类实现接口使用 implements
    2.接口类使用interface修饰,接口中只的方法无方法体
    3.体现了高内聚,低耦合的思想
    4.接口只能被继承,不能实例化,接口与接口之间可以继承extends
    5.接口中的方法必须是公有的public,默认为public


接口与抽象类的区别:
    1.抽象类中可以有已经实现的方法,但接口中只能有未实现的方法
    2.类可以多继承接口,但只能继承一个抽象类,对抽象类不能多继承
接口与继承的比较:
    1.接口的多继承是对普通类的单继承的一种补充
    2.可以在不破坏类层级的前提下,对某个类的功能进行扩展

final:PHP5.0以后新增(只能修饰类与方法)
    1.final修饰的类相当于C#中的密封类,此类不能被继承
    2.final修饰的方法不能被子类重写

const:常量
    1.不能被修改的变量,在内存中存储在专有的常量区
    2.可以定义在类或接口中,定义时,必须赋值
    3.常量名一般为大写,无修饰符,默认public,访问时使用:类名或接口名::常量名
    4.常量属于类,不属于对象,可以被子类继承

Code<?php

//抽象类Animal
abstract class Animal  
{
	public $name;

	//抽象方法 Cry();
	public abstract function Cry();

	public function GetName()
	{
		return $this->name;
	}
}

class Cat extends Animal{
	public function Cry(){

	 	echo("喵 喵 喵\n");
	 }
}
class Dog extends Animal{
	public function Cry(){

	 	echo("汪 汪 汪\n");
	 }
}
$c = new Cat();
$c->Cry();

$d = new Dog();
$d->Cry();

//接口
interface IUSB
{
	public function Start();
	public function Stop();
}

interface IWork
{
	function Read();
	function Write();
}

class Device
{
	public $name;
	function __construct($name)
	{
		$this->name = $name;
	}
	public function GetName()
	{
		echo $this->name."\n";
	}
}

//Camera类实现IUSB接口中的方法
class Camera implements IUSB
{
	function Start(){
		echo("相机开始工作\n");
	}
	function Stop(){
		echo("相机停止工作\n");
	}
}

//Phone类继承一个Device类并实现IUSB接口中的方法
class Phone extends Device implements IUSB,IWork
{
	function __construct($name)
	{
		parent::__construct($name);
	}

	function Start(){
		echo("手机机开始工作\n");
	}
	function Stop(){
		echo("手机停止工作\n");
	}

	function Read(){
		echo "数据读取...\n";
	}
	function Write(){
		echo "写入数据中...\n";
	}
}

$camera = new Camera();
$camera->Start();
$camera ->Stop();

$phone = new Phone("诺机亚");
$phone->Start();
$phone ->Stop();
$phone->Read();
$phone ->Write();
$phone->GetName();

//输出:
// 喵 喵 喵
// 汪 汪 汪
// 相机开始工作
// 相机停止工作
// 手机机开始工作
// 手机停止工作
// 数据读取...
// 写入数据中...
// 诺机亚


?>

 

转载于:https://www.cnblogs.com/lt-style/p/3501052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值