1.oop的三大特性?三大特性分别是什么意思?
封装,继承,多态
封装是为了隐藏类的内部机制,在不影响使用的前提下可以修改内部细节,同时可以保护内部数据。
继承是为了复用父类的代码,让程序有逻辑上的上下关系。
多态是能够让对象根据不同的消息参数,作出不同的行为,只要分为运行时多态和编译时多态。
2.oop的相较于面向过程的优缺点。
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
3.重载与重写?
面向对象的多态分为编译时多态和运行时多态。
编译时多态是静态的,根据方法列表的不同,来区分不同的函数,在编译之后会变成两个不同的函数,主要指方法的重载。
运行时多态是通过动态绑定来实现的*(动态绑定是指在运行过程中根据具体的对象才知道当前执行的是哪个方法),主要是指方法的重写。
区别:
形式的区别,重载是在同一个类中的同一个方法名,使用不同的参数返回。重写是在父子类之间有个继承关系,子类可以重写父类的方法。
实现的区别,重载是通过静态绑定的,在程序运行之前,就已经知道方法在哪个类。重写的具体实现相对复杂,每个类在方法区中都会有一个方法表,方法表中存放着各个方法的实际入口地址,如果某个方法在子类没有被重写,那么子类的虚方法表里面的地址入口和父类相同方法的地址入口是一致的,都指向父类的实现入口。如果子类中重写了这个方法,子类方法表中的地址将会替换为指向子类的实现入口。
(什么是绑定?把一个方法与其所在的类/对象关联起来叫做方法的绑定)