找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 632|回复: 0

Abstract抽象类与接口Interface

[复制链接]

296

主题

38

回帖

1272

积分

管理员

积分
1272
发表于 2021-4-22 12:37:53 | 显示全部楼层 |阅读模式
抽象类
  1. <?php

  2. /*
  3.         抽象类
  4.                 用于制定规范、标准,半成品。

  5.                 1. 修饰类和方法
  6.                 2. 抽象方法不能包含具体实现(不能包含方法体)
  7.                 3. 如果定义了抽象方法,该类也必须是抽象类。
  8.                 4. 抽象类也可以包含已经完成的普通的方法。

  9.                 5. 抽象类不能被实例化。

  10.                 6. 抽象方法必须被重写,既然要重写就需要继承,所有抽象方法被实现才允许使用。

  11. */

  12. abstract class Stdand
  13. {
  14.         //
  15. }

  16. // 定义抽象类
  17. abstract class Rule
  18. {
  19.         // 定义抽象方法
  20.         abstract public function close();

  21.         // 也可以包含普通的,已经完善的方法
  22.         public function version()
  23.         {
  24.                 echo 'version...';
  25.         }
  26. }

  27. class Ie extends Rule
  28. {
  29.         public function close()
  30.         {
  31.                 echo 'close ie.';
  32.         }
  33. }


  34. // abstract class Foo
  35. // {
  36. //         abstract public function test();
  37. // }
复制代码
接口
  1. <?php

  2. /*
  3.         abstract
  4.                 extends 继承

  5.         Interface
  6.                 制定标准,规范。
  7.        
  8.                 implements 实现

  9. */

  10. interface Rules
  11. {
  12.         // 1. 接口里面,所有都是抽象方法
  13.         public function open();
  14.         public function close();

  15.         /*
  16.         2. 不能有任何实现
  17.         public function version()
  18.         {
  19.                 echo 123;
  20.         }
  21.         */
  22. }

  23. class Google implements Rules
  24. {
  25.         public function open()
  26.         {
  27.                 echo 'Goole:open.<br>';
  28.         }
  29.         public function close()
  30.         {
  31.                 echo 'Goole:close.<br>';
  32.         }
  33. }

  34. class Firefox implements Rules
  35. {
  36.         public function open()
  37.         {
  38.                 echo 'Firefox:open.<br>';
  39.         }
  40.         public function close()
  41.         {
  42.                 echo 'Firefox:close.<br>';
  43.         }
  44. }
复制代码
多态
  1. <?php

  2. /*
  3.         不同的对象,调用同一个方法,会得到不同的形态或者结果。

  4.         抽象类 abstract 统一规范,标准.

  5. */

  6. // 定义抽象类
  7. abstract class Rule
  8. {
  9.         // 定义抽象方法
  10.         abstract public function close();
  11. }

  12. class Google extends Rule
  13. {
  14.         public function close()
  15.         {
  16.                 echo 'Goole:close.<br>';
  17.         }
  18. }

  19. class Firefox extends Rule
  20. {
  21.         public function close()
  22.         {
  23.                 echo 'Firefox:close.<br>';
  24.         }
  25. }

  26. class Ie extends Rule
  27. {
  28.         public function close()
  29.         {
  30.                 echo 'Ie:close.<br>';
  31.         }
  32. }

  33. class Qq extends Rule
  34. {
  35.         public function shutdown()
  36.         {
  37.                 echo 'Qq:close.<br>';
  38.         }

  39.         public function close()
  40.         {
  41.                 $this->shutdown();
  42.         }
  43. }

  44. class User
  45. {
  46.         // 指定了类型声明,必须是 Rule 的后代~
  47.         public function click(Rule $object)
  48.         {
  49.                 $object->close();
  50.         }

  51.         public function test()
  52.         {
  53.         }
  54. }

  55. $user = new User();
  56. $user->click(new Google());
  57. $user->click(new Ie());
  58. $user->click(new Firefox());
  59. $user->click(new Qq());
复制代码
demo
  1. <?php

  2. /*
  3.         abstract
  4.                 extends 继承

  5.         Interface
  6.                 制定标准,规范。
  7.        
  8.                 implements 实现
  9.                
  10.                 1. 接口里面,所有都是抽象方法
  11.                 2. 不能有任何实现
  12.                 3. 抽象类与抽象类之间,是继承关系。
  13.                 4. 接口与接口之间,是继承关系
  14.                 5. 类和接口是实现关系。
  15.                 6. 继承+实现。
  16.                         子类继承父类的同时,也可以实现、多实现。
  17. */

  18. interface Arrays
  19. {
  20.         public function limit();
  21. }

  22. interface Rules
  23. {
  24.         public function open();
  25.         public function close();
  26. }

  27. interface Stdand extends Rules
  28. {

  29. }

  30. abstract class Test
  31. {
  32.         abstract public function run();
  33. }

  34. abstract class Exam extends Test
  35. {
  36.         abstract public function go();
  37. }

  38. class Firefox extends Exam implements Stdand,Arrays
  39. {
  40.         public function open()
  41.         {
  42.                 echo 'Firefox:open.<br>';
  43.         }
  44.         public function close()
  45.         {
  46.                 echo 'Firefox:close.<br>';
  47.         }

  48.         public function go()
  49.         {
  50.                 echo 'Firefox:go.<br>';
  51.         }
  52.         public function run()
  53.         {
  54.                 echo 'Firefox:run.<br>';
  55.         }

  56.         public function limit()
  57.         {
  58.                 echo 'Firefox:limit.<br>';
  59.         }
  60. }
  61. $firefox = new Firefox();
  62. $firefox->run();
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|外汇论坛 ( 粤ICP备16021788号 )

GMT+8, 2024-5-10 13:29 , Processed in 0.078056 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表