PHP面向对象的的三大特性之继承性
2010-10-08 22:41
603 查看
1,什么是继承性
继承性就是从一个基类(父类)派生出来的派生类(子类),继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
所以,继承性是开放的,可拓展的。
并且增加了代码的可重用性(避免重复定义属性和方法)。
公共的关系(属性和方法)可以共享,也提高了软件的可维护性(添加修改删除公共的属性和方法)。
如果两个以上的类有公共的属性或方法,就应该运用继承性。
将公共的属性和方法声明为一个基类(父类),然后再让具有基类属性方法的类声明为派生类,然后可以为每个派生类做其特定的属性或方法的重写,拓展等。
PHP是单继承!!!(即一个子类的父类是唯一的)
2,继承性的注意
继承性是可以N层次继承的,其逻辑结构图类似一个树状结构。在应用时要尽量将第N层的类细分到尽可能小,这样在第N+1层的派生类中就不会有多余的属性或方法被继承,应用起来更灵活,代码冗余度更小。
3,继承性的应用
a,声明子类的方式:class 派生类名 extends 基类名{
成员(拓展,重写)
}
b,子类可以从父类中继承父类的所有属性和方法!
c,类之间的层次关系需要设计恰当!
4,访问类型控制。
虽然子类可以继承父类的所有内容,但是私有的成员方法只能在父类中使用!
(但是注意:父类中没有用private封装的方法中,使用了用private关键字封装的成员属性,这时可以用子类继承的父类的该方法间接的使用父类中private封装的成员属性!)
封装时既能让父类的内部使用,同时也能让子类使用的方法为:private------------------->protected关键字
(私有魔术方法__set() __get() __isset() __unset()可以被子类a继承,但该子类a在重载其父类私有魔术方法时会出错!!!)
5,子类中“重载”父类的方法
子类可以声明和父类相同的方法名,即覆盖(拓展)了从父类继承来的方法。
但此时存在一个问题:上述方法相当于在子类中重写了父类的方法,但是我们在修改了父类的方法后,子类的方法却没有跟随父类改变,造成了代码的维护和重用性效率低下。(或者父类中的方法新增了功能,子类中也无法体现。)
解决方案:在子类中调用父类中被覆盖的方法为:
父类名::方法名(参数);
此时出现问题----------->如果父类名需要修改,则子类继承时需要修改父类名,在子类中调用父类中被覆盖的方法时也要修改父类名,也造成了代码的维护和重用性效率低下。
解决方案:parent::方法名(参数);
在子类中编写构造方法,如果父类中也存在构造方法,一定要调用一次父类中被覆盖的构造方法。
注意::子类中重载的方法,不能低于父类中的访问权限。即子类只能放大权限!
继承性就是从一个基类(父类)派生出来的派生类(子类),继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
所以,继承性是开放的,可拓展的。
并且增加了代码的可重用性(避免重复定义属性和方法)。
公共的关系(属性和方法)可以共享,也提高了软件的可维护性(添加修改删除公共的属性和方法)。
如果两个以上的类有公共的属性或方法,就应该运用继承性。
将公共的属性和方法声明为一个基类(父类),然后再让具有基类属性方法的类声明为派生类,然后可以为每个派生类做其特定的属性或方法的重写,拓展等。
PHP是单继承!!!(即一个子类的父类是唯一的)
2,继承性的注意
继承性是可以N层次继承的,其逻辑结构图类似一个树状结构。在应用时要尽量将第N层的类细分到尽可能小,这样在第N+1层的派生类中就不会有多余的属性或方法被继承,应用起来更灵活,代码冗余度更小。
3,继承性的应用
a,声明子类的方式:class 派生类名 extends 基类名{
成员(拓展,重写)
}
b,子类可以从父类中继承父类的所有属性和方法!
c,类之间的层次关系需要设计恰当!
4,访问类型控制。
虽然子类可以继承父类的所有内容,但是私有的成员方法只能在父类中使用!
(但是注意:父类中没有用private封装的方法中,使用了用private关键字封装的成员属性,这时可以用子类继承的父类的该方法间接的使用父类中private封装的成员属性!)
封装时既能让父类的内部使用,同时也能让子类使用的方法为:private------------------->protected关键字
(私有魔术方法__set() __get() __isset() __unset()可以被子类a继承,但该子类a在重载其父类私有魔术方法时会出错!!!)
5,子类中“重载”父类的方法
子类可以声明和父类相同的方法名,即覆盖(拓展)了从父类继承来的方法。
但此时存在一个问题:上述方法相当于在子类中重写了父类的方法,但是我们在修改了父类的方法后,子类的方法却没有跟随父类改变,造成了代码的维护和重用性效率低下。(或者父类中的方法新增了功能,子类中也无法体现。)
解决方案:在子类中调用父类中被覆盖的方法为:
父类名::方法名(参数);
此时出现问题----------->如果父类名需要修改,则子类继承时需要修改父类名,在子类中调用父类中被覆盖的方法时也要修改父类名,也造成了代码的维护和重用性效率低下。
解决方案:parent::方法名(参数);
在子类中编写构造方法,如果父类中也存在构造方法,一定要调用一次父类中被覆盖的构造方法。
注意::子类中重载的方法,不能低于父类中的访问权限。即子类只能放大权限!
相关文章推荐
- php学习笔记------[php中面向对象三大特性之一[继承性]的应用]
- php学习笔记------[php中面向对象三大特性之一[继承性]的应用]
- php学习笔记------[php中面向对象三大特性之一[继承性]的应用]
- PHP面向对象三大特性之多态基础
- Javascript面向对象三大特性(封装性、继承性、多态性)详解及创建对象的各种方法
- PHP学习笔记---封装(面向对象三大特性之一)
- 随堂笔记- 面向对象的三大特性之继承性
- php学习笔记 php中面向对象三大特性之一[封装性]的应用
- php面向对象三大特性
- PHP面向对象三大特性
- PHP面向对象的三大特性之封装性
- PHP面向对象 三大特性
- JAVA快速入门-面向对象三大特性-继承性
- PHP面向对象——三大基本特性与五大基本原则
- PHP学习笔记之继承(面向对象三大特性之一)
- PHP面向对象——三大基本特性与五大基本原则
- PHP面向对象——三大基本特性与五大基本原则
- php面向对象三大特性——继承
- php面向对象三大特性——封装