面向对象三大特性
面向对象三大特性:封装,继承,多态
了解封装
封装的概念
了解封装总结
了解继承
定义:继承,即有些类似的对象中,如果人是一种大类,下面可以细分出一些小类,如男人女人等,然后有一些公共的特性可以在一些基础类中体现,而其他相似或较小类可以直接使用上级类中的公共代码.
1. 继承的基础:
子类(派生类)与父类(基类)之间本身是一种包含与被包含的关系,如此才有可继承的前提.
2.继承关键字:extends
子类须明确使用extends关键字明确继承父类.
3.继承效果:子类可以直接访问父类中授权访问成员
了解继承的总结
了解多态[PHP不支持]
定义:多态,是指在发生类的继承的情况下,同时出现方法的重写(override),即子类拥有与父类同名的方法.然后在实例化对象的时候让父类对象指向子类对象(强制类型,php不支持),父类对象表现的子类对象的特点.
1.JAVA的多态
2.php是弱类型语言,没有多态
了解多态的总结
PHP继承
继承相关概念和掌握
定义:extends,是指子类通过继承访问父类成员.
1. 继承基本语法: class 子类 extends 父类{}
注意父类有花括号,子类没有花括号.
//php继承
class 子类 extends 父类{
// 子类的类定义
}
其他语言参考:
//c++继承
class 子类: [访问权限修饰符] 父类{//不写访问权限修饰符则默认为private
//子类定义
}
//C#继承
class 子类 : 父类{
//子类的类定义
}
//java继承
class 子类 extends 父类{
//子类的类定义
}
2. 继承效果:父类被继承的内容,可以通过子类访问(拥有)
3. 继承目标:继承本质是针对同类有包含关系的共性继承
即父类通常包含子类,子类属于父类.所以在父类中通常定义的是子类共有的一些特性成员.这是开发者默认遵循的原则.
让男人继承自动物,符合生物学,但不符合实际应用.现实实际应用男人应该继承自人类才对.
继承相关概念和掌握总结
有限继承
定义:有限继承,指子类在继承父类成员的时候,并非继承所有内容,而是继承并使用父类部分内容.
1. 继承内容:子类继承父类所有的public成员,protected成员,不能访问private属性和private方法(完全禁止读写)
注:var_dump($m)虽然可以看到继承自父类的private属性,但子类完全不可访问(禁止读写)继承自父类的private属性和方法
2. protected受保护继承的属性和方法,只能在自身及子类内部访问.且类外部不可访问.
3. 子类内部访问父类private成员:不可访问父类private属性(虽然继承但完全不可用),不可访问父类private方法.且类外部不可访问
子类若想访问父类private成员,只能父类提供public或protected方法给予子类访问.
注意:以上案例仅为知识说明.从设计意义上来讲,设为private成员就是禁止外部访问,所以父类也不会提供对外接口.
4. 静态成员(含类常量)也遵循继承原则(php继承本质是对象).只是访问方式由类来访问
5. 构造方法和析构方法会被子类继承.此时需要注意子类对象实例化时对应的父类构造方法的参数
总结
重写override
定义:override,即子类中重写了与父类同名的成员.子类可以重写父类任意类成员.
通常重写用于重写父类方法,用于扩展或更改业务逻辑.
1. 子类继承父类:子类定义与父类同名的成员
2.在子类中重写与父类同名成员后,子类只会直接访问子类同名成员(覆盖)
注意:子类可以覆盖掉父类的public, protected成员,一旦重写,父类的就不会存在.而父类的private属性不会被覆盖丢失.
3. 重写的要求1:子类重写父类的方法,控制权不能高于父类,即子类可以比父类更开放
4.重写要求2:php中要求子类重写父类方法的时候,必须保证与父类同名方法参数一致
注意:重写的方法参数不单要求数量一致,而且数据类型也必须相同.但形参名字可以不同.另外php7以前对重写对于参数没有要求
5.重写要求3:重写针对的是被继承的成员,父类私有方法不会被继承,因此不受重写要求2的规定.
6.重写是指子类拥有特殊情况,一般是需要在父类的基础上进行扩展,此时如果需要继续保证父类被重写的方法继续执行(默认永远只访问子类重写的新方法),需要在子类重写方法的时候使用parent关键字
注意:parent不能访问父类的属性(因为子类实例化的对象的属性覆盖掉父类提供的属性-属性是每个对象独立拥有一份单独的拷贝,因此会被覆盖掉),它可以访问父类的静态属性,静态方法,类常量和普通方法(因为方法,静态属性和类常量存储在类中,因此这些东西子类不会覆盖掉父类的.)
重写总结
php继承特点(与其他语言比较)
1.php只能单继承,即子类只有1个直系父类;不能多继承(即子类有1个以上的直系父类:例如小孩子继承爸爸和妈妈这种情况)
2. php若想多继承,可以使用变通的间接多继承:链式继承
很明显间接多继承有时候不合逻辑不合理.