php抽象类和接口的整理(包含运行代码)

抽象类和接口

抽象类(一种抽象的类)

一、什么是抽象方法?

定义:一个方法如果没有方法体(一个方法,不使用{},直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法。

 class Person{

   abstract function say(); 没有方法体的 、使用abstract 关键字修饰

   abstract function say(){  这个不是、有方法体{}

};

}

总结 1.声明一个方法不使用{},而直接分号结束。2.如果是抽象方法,必须使用abstract(抽象 关键字来修饰)

二、什么是抽象类呢?

1.如果一个类中有一个方法是抽象的方法,这个类就是抽象类。

2.如果声明一个抽象类,则这个类必须要使用abstract 关键字来修饰。

abstract class Person{

   public $name;

   abstract function say();

   abstract function eat();

}

注意

1.只要使用abstract 来修饰的类,就是抽象类。

2.抽象类是一个特殊的类,特殊在哪里(在抽象类中可以有抽象方法)。

3.除了在抽象类中可以有抽象方法以外,和正常的类完全一样。

注意2

1. 抽象类不能实例化对象(不能创建出对象)。

$p=new Person(); //报错

2. 如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)。

class student extend Person()

{

 function say(){   // 只覆盖了父类的一个

 

}

}

3. 子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果实现部分,那么还有抽象方法,他还是抽象类。

class student extend Person()

{

 function say(){   // 只覆盖了父类的一个

 

}

}

 

 

抽象方法作用

1. 抽象方法就是一个规定,规定子类必须有这个方法的实现,功能交给子类实现。

只写出来结构,没有实现,实现交给具体的子类(按自己功能实现)。

class student extend Person()

{

 function say(){  

}                // 覆盖了父类两个抽象方法

function eat(){   

}

}

抽象类作用

就是要求子类的结构,所以抽象类就是一个规范。(只有形)

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

接口和抽象类的相同点

1.抽象类和接口都有抽象方法。

2.抽象类和接口不能创建实例对象。

3.抽象类和接口使用意义相同。定义一种规范。

不同点

1.接口中的方法必须全要是抽象方法(不能用不抽象的方法),所以在接口的所有方法中不使用abstract,直接使用 分号结束。

2.接口中的成员属性,必须是常量(不能有变量)。

3.接口所有权限必须是公有的 public

4.声明接口 不使用class 使用 interface

interface Person{

  public $name; //不能声明变量  报错

   const NAME='tom'// 可以声明常量

  function test();   //因为接口中全部是抽象方法 所以 省去 abstract

  function test1();

Protect function test3() 报错  只可以是 public

}

$re=new Person; //报错 不可以 创建实例化 对象 。

echo Person:: NAME; 输出常量。

 

接口应用的一些细节

1. 可以使用 extends,让一个接口继承另一个接口(接口和接口的关系---只有扩展抽象方法,没有覆盖关系)

2. 可以使用一个类,来实现接口中的全部方法,也可也使用一个抽象类,来实现接口的部分方法。(类与接口  或者 抽象类 与接口,有覆盖的关系,---重写---实现接口中的抽象方法)

 

interface Demo{

 

   const NAME='tom';

 public  function test();

 

 public  function test1();

 

}

 

 

interface test extends Demo{  //接口对接口 只有扩展

 function test2();

}

3.只要在子类中有覆盖的动作,就不要使用extends(继承 扩展)这个关键字,使用implements 实现。

interface Demo{

   const NAME='tom';

 public  function test();

 

 public  function test1();

}

interface test extends Demo{  //接口对接口 只有扩展

 function test2();

}

class Hello extends test{} // 报错 // 类对接口 有覆盖

abstract class Hello implements test{

} //不报错

 

 

 

4.一个类可以在继承另一个类的同时,使用implements 实现接口(可以实现多个接口)(一定要先继承,在实现接口)

 

interface Demo{

   const NAME='tom';

   public  function test();

 

public  function test1();

}

 

interface test extends Demo{  //接口对接口 只有扩展

 function test2();

}

 

 

Class Word{

Function test5(){

}

}

 

 class Hello extends Word  implements test{

//可以使用接口

function test(){

}

function test1(){

}

//实现接口

function test2(){

}

//function test5(){

}

}

 

 

5.实现多个接口,只需使用逗号分开即可。

php 中一个类 只要一个父类 。

interface Demo{

   const NAME='tom';

  function test1();

 

}

interface Test extends Demo{

 function test2();

}

class World{

 function test3();

}

 

interface Abc{

function test6{}

 

}

 

class Hello extends World implements Test,Abc{

  function test1(){

};

  function test2(){

echo 11;

};

 

  function test3(){

};

 

  function test6(){

};

 

}

$re=new Hello;

$re->test2();  //输出 11

 备注 :转载请表明出处!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值