美文网首页
php 面向对象特性 面试必备

php 面向对象特性 面试必备

作者: mafa1993 | 来源:发表于2021-04-04 15:27 被阅读0次

    最近面试很多很多年经验的都答不上来,特此整理

    php oop

    封装好处:

    1. 良好的封装可以减少耦合
    2. 类内部的实现可以自由修改
    3. 具有清晰的对外接口
      • 房屋:封装 窗户:对外属性

    继承(多个子类要完成一个功能但是功能):

    对象的继承代表了一种 is-a 的关系 继承又可以理解为是对被继承者的特殊化, 因为除了被继承者的特性外还具备自己的个性;
    继承定义了类和如何相互关联 共享特性;
    总结:如果子类继承于父类,
    1. 子类拥有父类非 private 的属性和功能;
    2. 子类具有自己的属性和功能;
    3. 子类还可以以自己的方式实现父类的功能(方法重写);

    优点: 如果不用重写,修改功能就必须在所有的重复方法中修改,代码越多越容易出错;
    1. 继承使得所有子类的公共部分都放在了父类,使得代码得到了共享,避免重复;
    2. 继承可以使得修改或扩展继承而来的实现都较为容易;

    缺点:
    1. 父类变子类不得不变;
    2. 继承会破坏包装,父类实现细节暴露给子类,增大了两个类之间的耦合;

    何时使用:两个类具有 is-a 关系使用, 如果是 has-a 则可以不用

    多态(子类的实现不同但需要父类) 多态的价值:即使形态可能不同但是总能依靠接口指导你的实现;

    多态表示 不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行

    重构(子类有共同但是不同实现的方法):

    父类创建虚方法让子类重写

    抽象类(父类没有实例化的必要的时候)

    把实例化没有意义的父类改为抽象类,没有具体实现的方法改为抽象方法;

    尽量让抽象类拥有尽可能多的相同代码和尽可能少的数据;

    注意:
    1. 抽象类不能实例化;
    2. 抽象类必须是被子类重写的方法;
    3. 如果抽象类包含抽象方法,那么类就必须为抽象类;

    抽象类通代表一个抽象的概念,提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的; 具体的类不是用来继承的(不一定,需要具体考虑);
    

    接口(不是该类的功能不要写入当前类,可以通过接口约束)

    1. 接口是把隐式公共方法合起来,以封装特定功能的一个集合;
    2. 一旦类实现了接口,类就可以支持接口所指定的所有成员; 声明接口在语法上与生命抽象类完全相同,但不允许提供接口中任何成员的执行方式;
    3. 实现接口就必须实现接口中的所有方法;
    

    抽象类和接口:

    形态上区分:

        1. 抽象类可以给出一些成员的实现,接口不能包含实现;
        2. 抽象类的成员可以被子类部分实现,接口的成员需要实现类完全实现;
        3. 一个类只能继承一个抽象类,可以实现多个接口;
    

    其他方面考虑:

        1. 类是对对象的抽象,抽象类是对类的抽象,接口是对行为(方法)的抽象;
        2. 如果行为跨越不同的对象,可以使用接口;对于一些相似的类对象,用继承抽象类;
        3. 从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认就预先定义让子类必须遵守;
    

    通过重构改善 即有代码的设计;当只有一个的时候再去设计一个父类就会过度设计(不是所有的代码都一定要用到所有的知识点, 合适就是最好的);

    相关文章

      网友评论

          本文标题:php 面向对象特性 面试必备

          本文链接:https://www.haomeiwen.com/subject/njdlkltx.html