面向对象php学习笔记18:面向对象三大特性,PHP继承[继承概念,有限继承.重写override]

面向对象三大特性

面向对象三大特性:封装,继承,多态

了解封装

封装的概念

了解封装总结

了解继承

定义:继承,即有些类似的对象中,如果人是一种大类,下面可以细分出一些小类,如男人女人等,然后有一些公共的特性可以在一些基础类中体现,而其他相似或较小类可以直接使用上级类中的公共代码.

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若想多继承,可以使用变通的间接多继承:链式继承

很明显间接多继承有时候不合逻辑不合理.

3. php中只有private方法不能被继承(有的语言禁止继承private成员)

4. php允许子类继承父类的构造方法和析构方法(有的语言子类必须单独重写)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值