关于继承与重写
2016-06-07 21:53
197 查看
<?php header("content-type:text/html;charset='utf-8'"); /* 继承,它是指建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数, 而且可以重新定义或加进新数据和函数,从而建立了类的层次或等级。说的简单点就是, 继承性是子类自动共享父类数据结构和方法的机制, 在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法, 它简化了对象、类的创建工作量,增加了代码的可重性。采用继承性,提供了类的规范的等级结构。 通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。 PHP是单继承,也就是说,一个类只能直接从一个类中继承数据, */ //定义一个“人类”作为父类 class Person { public $name; public $age; public $sex; //构造方法 会在创建对象的时候自动调用,初始化赋值 function __construct($name,$age,$sex) { $this->name=$name; $this->age=$age; $this->sex=$sex; } //这个人可以说话的方法, 说出自己的成员属性, function say() { echo $this->name."这个人在说话,他说他的年龄是".$this->age."性别是".$this->sex."</br>"; } } /* //定义一个子类“学生类“使用”extends”关键字来继承”人”类 class Student extends Person { public $school; //学生所在学校的属性 //这个学生学习的方法 function study() { echo "我的名子叫:".$this->name." 我正在”.$this->school.” 学习<br>"; } } $s1 = new Student('小红','20','女'); echo $s1->say(); */ /* 人类里面“说话”的方法里面说出的是“Person”类里面的属性, 而“Student”类对“Person”类进行了扩展, 又扩展出了几个新的属性,如果使用继承过来的“say()”说话方法的话,只能说出从“Person”类继承过来的那些属性, 那么新扩展的那些属性使用这个继承过来的“say()”的方法就说不出来了,那有的人就问了,我在“Student”这个子类中再定义 一个新的方法用于说话,说出子类里面所有的属性不就行了吗?一定不要这么做, 从抽象的角度来讲, 一个“学生”不能有两种“说话”的方法,就算你定义了两个不同的说话的方法,可以实现你想要的功能, 被继承过来的那个“说话“方法可能没有机会用到了,而且是继承过来的你也删不掉。这个时候我们就要用到覆盖了。 虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法, 这样就把父类中继承过来的方法覆盖掉了。 */ class Student extends Person { public $school; //学生所在学校的属性 //如果自己在类外再去定义属性访问的话,不用写 public function __construct($name,$age,$sex,$school){ //使用父类中的方法为原有的属性赋值 parent::__construct($name,$age,$sex); // $this->school=$school; } //这个学生学习的方法 public function study() { echo "我的名子叫:".$this->name." 我正在”.$this->school.” 学习<br>"; } //这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法 public function say() { //使用父类的“类名::“来调用父类中被覆盖的方法; // Person::say(); //或者使用“parent::”的方试来调用父类中被覆盖的方法; parent::say(); //加上一点自己的功能 echo "我在".$this->school."上学.<br>"; } } /* 构造方法在子类中如果没有声明的话,也可以使用父类中的构造方法,如果子类中重新定义了一个构造方法也会 覆盖掉父类中的构造方法,如果想使用新的构造方法为所有属性赋值也可以用同样的方式。 */ /* 子类访问自己的属性,需要再去在类外定义,然后去调用 $s1 = new Student('八蛋','15','男'); $s1->school='bawei'; $s1->say(); $s1->study(); //调用子类自己的方法 */ //更直接的是在子类中重写构造方法,继承原有的父类方法,再加上自己的, $s1 = new Student('八蛋','15','男','beida'); $s1->say();
相关文章推荐
- Android 百分比支持库 android-percent-support
- 快速设置Mysql的auto_increment参数
- Linux系统常用命令
- Sprint第二个冲刺(第六天)
- js中apply的妙用
- C/C++ RPG游戏
- CSS权重
- <%= %>、<% %>、<%@ %>、<%:%>和<%# %>的区别
- __get(),__set()
- Python基础之运算操作符总结
- 20160607Start
- html5新增的结构元素
- Git使用总结(包含Git Bash和Git GUI的使用)
- java笔记day22—GUI(1)
- restful是什么
- 对oop一些的基本操作
- restful是什么
- UVA673 水,模拟栈
- opencv中drawing line时报错
- S5PV210的交叉编译工具链的安装