1、面向对象和面向过程的区别和联系
都是对软件设计的一种思想,他们之间是相辅相成的。面向过程适合解决简单的事情(不需要协作的事情),比如:开车第一步打火、踩离合、挂挡、踩油门等等。而面向对象适合解决复杂的事情,比如:造车首先会想到车由什么物体组成(发动机、变速箱、底盘),然后造发动机(流水线/工序),同时将造发动机的过程封装起来,可以将这一个工序看成基于面向过程的。
2、对面向对象的理解
面向对象是一种思想,是基于面向过程而言的。面向对象是将功能等封装进对象之中,让对象去实现具体的细节;面向对象也是一种程序设计技术,它将重点放在对象和对象的接口上。用木匠打一个比方:一个面向对象的木匠始终关注的是制作的椅子,其次才是使用的工具,一个非面向对象的木匠首先考虑的是使用的工具上。
面向对象有三大特性:封装、继承、多态。其中封装是指隐藏的对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性;继承就是两种事物之前存在着一定的所属关系,那么继承的类就可以从被继承的类获得一些属性和方法,这就提高了代码的复用性;多态就是说父类或者接口的引用指向了子类对象,这就提高了代码的扩展性。
3、封装
封装性就就是对外部不可见,外部只能通过对象提供的接口来访问,具体一旦来说就是我们在定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过修饰符来完成,可以理解为一个黑匣子,它可以阻止外部定义的代码随意访问内部的代码和属性。使用封装性的好处是:(1)良好的封装性可以减少耦合(2)类内部的结构可以自由修改(3)可以对成员进行更准确的控制(4)实现隐藏细节
4、继承
继承指的是两种事物之间的一种所属关系。具体是指已存在的类的定义作为基础建立新类的技术。新类的定义可以增加一些新的数据或者功能,也可以从被继承的类中获得一些属性和方法,但是不能选择性继承。使用继承的好处是提高了代码的复用性,并且为多态提供了前提。
5、多态
多态就是多种形态,同一方法作用于不同的对象时可以有不同的执行结果。使用多态的好处是提高了代码的维护性和可扩展性。使用多态的弊端不能使用子类特有的功能,如果非得使用,
多态有两种方式:
(1)重载(方法名称相同,参数个数、顺序、类型不相同,对返回值无要求):重载是静态分派的典型应用,发生在类的编译阶段。编译器在重载时是根据方法的调用者和方法参数的静态类型作为判断依据的。
(2)重写(方法名称相同,方法参数列表相同):重写主要针对的是虚方法,这类方法在类加载阶段不可以将符号引用转换为直接引用,只能是在类的运行期间根据变量的实际类型才能确定目标方法的执行版本,这个过程称为动态分派。相反,满足“编译器可知,运行期不可变”的特性称为非虚方法,主要被invokeStatic和invokeSpecial两种指令调用,具体类型为:静态方法、父类方法、实例方法、构造方法、私有方法包括final方法。在类加载阶段就可以将他们的符号引用转换为直接引用,不会延迟到运行期,进而确定执行结果,这个过程称为静态解析。