php 的抽象方法和抽象类和接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/my_study_everyday/article/details/88577027

原文地址:php 的抽象方法和抽象类和接口

抽象方法和抽象类

1. 什么是抽象方法?

定义:一个方法如果没有方法体,则这个方法就是抽象方法。

没有方法体: 一个方法不使用 “{}”,直接使用分号结束的方法。
如果是抽象方法,必须使用 abstract 来修饰

2. 什么是抽象类?

如果一个类中有一个方法是抽象方法,则这个类是抽象类。 如果声明一个抽象类,必须使用 abstract 来修饰

注意:

  1. 只要使用 abstract 修饰的类就是抽象类。不一定有抽象方法
  2. 抽象类是一种特殊的类,在抽象类中可以有抽象方法。
  3. 除了在抽象类中可以有抽象方法,其他和正常的类完全一样。

注意 2:

  1. 抽象类不能实例化对象
  2. 如果看见抽象类就必须写这个类的子类。将抽象类的抽象方法覆盖(加上方法体)
  3. 子类必须全部实现抽象类的抽象方法。如果只实现部分,那么子类也必须是抽象类。

抽象方法的作用:

抽象方法的作用就是规定子类必须有这个方法的实现,功能交给子类。 只写出结构,而没有实现,实现交给子类按照自己的功能去实现。

抽象类的作用:

规范所有子类的写法

abstract class Person
{
	public $name;
	public $age;

	abstract function say();

	public function walk(){}

	function sleep(){
		echo "ssssssssssssssss";
	}
}

class StudentCn extends Person
{
	function say(){
		echo "我说中国话<br>";
	}
}

class StudentEn extends Person
{
	function say(){
		echo "I speek English<br>";
	}
}

$s1 = new StudentEn();
$s2 = new StudentCn();

$s1->say();
$s2->say();

接口

抽象类是一种抽象的类,接口是一种特殊的抽象类。

  1. 抽象类和接口中都有抽象方法
  2. 抽象类和接口都不能实例化对象
  3. 抽象类和接口使用作用一样,都是规范

接口和抽象类相比,特殊在哪里?

  1. 接口中的方法,必须全部是抽象方法。所以在接口中,可以省略 abstract
  2. 接口中的成员属性,必须是常量(不能有变量)。
  3. 所有的权限必须是公有的(public)
  4. 声明接口使用 interface

接口应用的一些细节:

  1. 可以使用extends继承自另一个接口。(接口和接口只有扩展新抽象方法,没有覆盖的关系)
  2. 可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法
    (类与接口,抽象类与接口 =》有实现接口中的抽象方法)
  3. 类(抽象类)实现接口使用关键字 implements
  4. 实现多个接口只需要使用逗号分开即可。
interface Demo {
	const NAME = "qdgithub.com";
	const AGE = "3年";

	function demo1();
	function demo2();
	function demo3();
}

interface Test extends Demo {
	function test4();
}

interface Abc {
	function abc();
}

class World
{
	function test5(){

	}
}

class Hello extends World implements Test,Abc{
	function demo1(){}
	function demo2(){}
	function demo3(){
		echo "我是实现接口Demo的方法";
	}
	function test4(){}
	function abc(){}
	function test5(){}
} 

$h = new Hello();

$h->demo3();

php的多态应用实例

interface USB {
	const WIDTH = 12;
	const HEIGHT = 3;

	function load();
	function run();
	function stop();
}

class Computer
{

	function useUSB(USB $usb){
		$usb->load();
		$usb->run();
		$usb->stop();
	}
}


class Mouse implements USB
{
	function load(){
		echo "鼠标加载成功<br>";
	}
	function run(){
		echo "鼠标 运行 成功<br>";
	}
	function stop(){
		echo "鼠标 stop 成功<br>";
	}
}

class KeyBoard implements USB
{
	function load(){
		echo "键盘加载成功<br>";
	}
	function run(){
		echo "键盘 运行 成功<br>";
	}
	function stop(){
		echo "键盘 stop 成功<br>";
	}
}

class Worker
{
	public static function work($o){
		$c = new Computer();
		$c->useUSB($o);
	}
}

$m = new Mouse();
$k = new KeyBoard();
Worker::work($m);
Worker::work($k);

猜你喜欢

转载自blog.csdn.net/my_study_everyday/article/details/88577027