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

继承的深入理解

[复制链接]

304

主题

42

回帖

1338

积分

管理员

积分
1338
发表于 2021-4-22 12:26:27 | 显示全部楼层 |阅读模式
继承的特性
  1. <?php

  2. /*
  3.         访问控制
  4.                 public          公有属性

  5.                 protected         受保护属性

  6.                 private         私有属性

  7.                                 public        protected         private
  8.             自己      Y         Y          Y
  9.                 家族      Y         Y          N
  10.                 外部      Y         N          N
  11.        
  12.         继承特性
  13.                 1. 子类会拥有父类的所有内容

  14.                 2. 只支持单继承(一个爹)

  15.                 3. 可以被多个继承(多个儿子)

  16.                 4. 支持多层继承(祖孙关系)

  17.        
  18. */

  19. class Animal
  20. {
  21.         public function eat()
  22.         {
  23.                 echo 'eat';
  24.         }
  25. }


  26. class Pig extends Animal
  27. {
  28.         public function run()
  29.         {
  30.                 echo 'run';
  31.         }
  32. }

  33. class Bj extends Pig
  34. {

  35. }

  36. $obj = new Bj();

  37. $obj->run();
  38. $obj->eat();
复制代码
属性的继承
  1. <?php

  2. /*

  3.         访问控制
  4.                 public          公有属性

  5.                 protected         受保护属性

  6.                 private         私有属性

  7.                                 public        protected         private
  8.             自己      Y         Y          Y
  9.                 家族      Y         Y          N
  10.                 外部      Y         N          N
  11.        
  12.         继承特性
  13.                 1. 子类会拥有父类的所有内容

  14.                 2. 只支持单继承(一个爹)

  15.                 3. 可以被多个继承(多个儿子)

  16.                 4. 支持多层继承(祖孙关系)

  17.         属性继承的研究
  18.        
  19.                 1. 子类中出现于父类同名的属性,将会被覆盖(重写)
  20.                 2. 类首先查找自身是否存在这个属性,有则返回
  21.                 3. 子类中可以增加属性和方法,是对父类的扩展
  22.                 4. 访问的权限,只能放大,不能缩小。

  23.         public(3) -> protected(2) -> private(1)

  24. */

  25. class Animal
  26. {
  27.         public $sex = 0;
  28. }

  29. class Pig extends Animal
  30. {
  31.         // 重写
  32.         public $sex = 2;

  33.         // 扩展属性
  34.         public $age = 18;
  35. }
  36. $pig = new Pig();
  37. echo $pig->sex;
  38. echo '<pre>';
  39.         print_r($pig);
  40. echo '</pre>';


  41. class A
  42. {
  43.         private $test = 123;
  44. }
  45. class B extends A
  46. {
  47.         public $test = 456;
  48. }
  49. $b = new B();
  50. echo '<pre>';
  51.         print_r($b);
  52. echo '</pre>';
复制代码
方法的继承
  1. <?php

  2. /*

  3.         访问控制
  4.                 public          公有属性

  5.                 protected         受保护属性

  6.                 private         私有属性

  7.                                 public        protected         private
  8.             自己      Y         Y          Y
  9.                 家族      Y         Y          N
  10.                 外部      Y         N          N
  11.        
  12.         继承特性
  13.                 1. 子类会拥有父类的所有内容

  14.                 2. 只支持单继承(一个爹)

  15.                 3. 可以被多个继承(多个儿子)

  16.                 4. 支持多层继承(祖孙关系)

  17.         属性的研究
  18.        
  19.                 1. 子类中出现于父类同名的属性,将会被覆盖(重写)
  20.                 2. 类首先查找自身是否存在这个属性,有则返回
  21.                 3. 子类中可以增加属性和方法,是对父类的扩展
  22.                 4. 访问的权限,只能放大,不能缩小。

  23.         public(3) > protected(2) > private(1)
  24.        
  25.         方法继承的研究
  26.                 1. 子类中出现了与父类同名的方法,将会被覆盖(重写)

  27.                 2. 访问的权限,只能放大,不能缩小。
  28.                
  29.                 3. 重写父类的方法,参数结构必须一致
  30.                         1. 参数个数,必须是大于或者等于父类
  31.                         2. 如果扩展了一个参数,那么必须给默认值

  32. */

  33. class Animal
  34. {
  35.         public function say($x, $y = 2222)
  36.         {
  37.                 echo 'Hello ' . $x . ' ' . $y;
  38.         }
  39. }

  40. class Pig extends Animal
  41. {
  42.         // 重写
  43.         public function say($x, $y = 3333, $z = '')
  44.         {
  45.                 echo '呵呵' . $x . ' ' . $y . ' ' . $z;
  46.         }

  47.         public function run()
  48.         {
  49.                 // 调用自己的 say 方法
  50.                 $this->say('x', 'y', 'z');

  51.                 // 调用父类的 say 方法
  52.                 parent::say('par-x', 'par-y');
  53.         }
  54. }
  55. $pig = new Pig();
  56. $pig->say('xo', 'ma', 'oh');


  57. $pig->run();
复制代码
方法的继承2
  1. <?php

  2. /*

  3.         访问控制
  4.                 public          公有属性

  5.                 protected         受保护属性

  6.                 private         私有属性

  7.                                 public        protected         private
  8.             自己      Y         Y          Y
  9.                 家族      Y         Y          N
  10.                 外部      Y         N          N
  11.        
  12.         继承特性
  13.                 1. 子类会拥有父类的所有内容

  14.                 2. 只支持单继承(一个爹)

  15.                 3. 可以被多个继承(多个儿子)

  16.                 4. 支持多层继承(祖孙关系)

  17.         属性的研究
  18.        
  19.                 1. 子类中出现于父类同名的属性,将会被覆盖(重写)
  20.                 2. 类首先查找自身是否存在这个属性,有则返回
  21.                 3. 子类中可以增加属性和方法,是对父类的扩展
  22.                 4. 访问的权限,只能放大,不能缩小。

  23.         public(3) > protected(2) > private(1)
  24.        
  25.         方法继承的研究
  26.                 1. 子类中出现了与父类同名的方法,将会被覆盖(重写)

  27.                 2. 访问的权限,只能放大,不能缩小。
  28.                
  29.                 3. 重写父类的方法,参数结构必须一致
  30.                         1. 参数个数,必须是大于或者等于父类
  31.                         2. 如果扩展了一个参数,那么必须给默认值
  32.                
  33.                 4. 调用父类,使用关键字 parent

  34.                 5. 重写父类的构造方法,务必在第一行调用父类的构造方法。
  35. */

  36. class Animal
  37. {
  38.         // 构造方法
  39.         public function __construct()
  40.         {
  41.                 echo 'Animal:construct 初始化 <br>';
  42.         }
  43. }

  44. class Pig extends Animal
  45. {
  46.         // 重写构造方法
  47.         public function __construct()
  48.         {
  49.                 // 务必要调用父类的构造方法
  50.                 parent::__construct();

  51.                 echo 'Pig:construct 初始化 <br>';
  52.         }
  53. }
  54. $pig = new Pig();
复制代码


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-23 07:17 , Processed in 0.068614 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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