首页 > 其他 > 详细

时间:2014年3月29日19:20:41继承

时间:2014-03-30 08:20:17      阅读:596      评论:0      收藏:0      [点我收藏+]


封装的概念:可以通过权限修饰符,把某些属性封装在类的内部,

并通过指定的公共接口来访问,

还有,调用某个公共方法时,该公共方法可能调用在内部多个方法,

但是调用者不知道内部的调用过程

Publicprivate区别:

看调用私有属性private属性方法的那句话,发生在类{}内部,还是类{}外部

【主要内容】

3种权限修饰符比较

继承时的权限变化

构造函数的继承

私有属性的继承

继承:是指以一个类为父类,另一个类为子类,

     子类继承父类的属性和方法的基础上,还可以增添或修改

<?php

class Human{

private $height = 160;

public function cry(){

echo "55555<br/>";

}

}

class Stu{

private $height = 170;

public $snum = ‘00134‘;

public function cry(){

echo "59595959<br/>";

}

public function study(){

echo "good good study good good study<br/>";

}

}

class Lawer{

private $height = 180;

public $area = ‘经济案件‘;

public function cry(){

echo "55555<br/>";

}

public function bianhu(){

echo "我的当事人是无罪的<br/>";

}

}

$zhoukouren = new Human();

$xiaoming = new Stu();

$lizhuang = new Lawer();

$zhoukouren->cry();//55555

$xiaoming->study();//good good study good good study

$lizhuang->cry();//55555

$lizhuang->bianhu();//我的当事人是无罪的

?>

思考:

1.学生和律师,归根结底还是人,自然人的 属性和方法都具有

2. 学生和律师,虽然是人,但是比原始的人,又多了一些属性和方法

3. 以上三个类,既有原始人的属性,又有学生和律师的独特的属性,没有很好的利用上第一点

4. 既然都是人,默认就应该有人的属性,何必再声明一遍呢?

5. 代码已经冗余

如何达到学生和律师就有人的属性,达到代码的重用和简介,

利用继承

<?php

class Human{

private $height = 160;

public function cry(){

echo "55555<br/>";

}

}

//再声明一个学生类,学生的本质还是人

//只不过是在人类中,稍微特殊的一个群体

//即在人类的基础上,衍生出的学生类

//可以让学生类,继承与人类

class  Stu extends Human{}

$lili = new Stu();

$zhoukou = new Human();

$zhoukou->cry();//55555

$lili->cry();//55555

$lili->laugh();// Call to undefined method Stu::laugh()

?>

在学生类中,cry()laugh()都没有定义,为什么cry()可以调用成功,laugh()调用失败

因为stu类,继承自Human

现实中,继承的例子很多:

语法:extends

子类 extends 父类{}

注意:

子类,只能继承自一个父类

子类继承了哪些东西?

子类可以做什么扩充?

构造函数如何继承?

私有属性和方法如何继承?

私有属性的继承

<?php

class Human{

private $wife = "meimei";

public function tell(){

echo $this->wife,‘<br/>‘;

}

public function cry(){

echo "5555555555555<br/>";

}

}

class Stu extends Human{

public function subtell(){

echo $this->wife;

}

}

$lisi = new Stu();

$lisi->cry();//5555555555555

$lisi->tell();//meimei

$lisi->subtell();//出错,未定义的wife属性

?>

父类的wifi属性属性,为什么没继承过来?

私有属性,可以理解不能继承,

其实可以继承过来,只不过无法访问。

Public protected private 中,

Public protected 都可以继承,并拥有访问和修改的权限

Private 私有的,可以继承,无权操作

对于子类继承父类的Public protected 属性和方法,

1.父类有的,子类可以继承

2.父类有的,子类可以更改

3.父类没有的,子类可以添加

父类的private可以继承,但不能操作:

<?php

class Human{

private $wife = "meimei";

public function tell(){

echo $this->wife,‘<br/>‘;

}

public function cry(){

echo "5555555555555<br/>";

}

}

class Stu extends Human{

private $wife = ‘coco‘;

public function subtell(){

echo $this->wife;

}

}

$lisi = new Stu();

print_r($lisi);

//Stu Object ( [wife:private] => coco [wife:private] => meimei )

?>

继承时,继承来protected public属性和方法

继承来,子类private属性和方法,但不能操作


本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1386750

时间:2014年3月29日19:20:41继承,布布扣,bubuko.com

时间:2014年3月29日19:20:41继承

原文:http://duguodong.blog.51cto.com/7667978/1386750

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!