面向过程与面向对象及面向对象三大特性
#########################################################
今天复习一下面向对象的特性以及与面向过程的区别,并对其中的一些细节内容进行回顾!!!
#########################################################
一、面向过程与面向对象的区别?
面向过程:是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程中数据和对数据的操作是分离的。
1)优点:性能比面向对象高,因为在类调用是需要实例化,开销比较大,比较消耗资源。
2)缺点:没有面向对象易维护、易复用、易扩展。
面向对象:是将事物对象化,通过对象通信来解决问题。面向对象编程中数据和对数据的操作是在一起的。
1)优点:由于面向对象有继承、封装、多态的特性,可以设计出低耦合的系统,使系统更更灵活,更易于维护。
2)缺点:性能比面向过程低。
二、面向对象三大特性:继承、封装、多态
1.继承:子类继承父类非私有的属性和方法,子类可以添加自己的属性和方法,子类可以重新定义父类的方法。
1)注意:java中是单继承,即一个子类只能继承一个父类;java中object类是所有类的直接或间接父类;每一个子类被实现按时(new),父类会在它之前实现(被new)。
构造函数不能被继承,子类可以通过super()显式调用父类的构造函数;创建子类时,默认调用父类的无参构造函数;如果父类没有定义无参构造函数,子类必须在构造函数的第一行使用 super()显式调用(先父后子)。
2)为什么需要继承呢?
第一,代码复用;第二,父类的引用变量可以指向子类对象。
2.封装:即隐藏对象的属性和实现方法,仅对外提供公共的访问方法。
1)为什么需要封装呢?
封装符合面向对象设计的单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,它们只调用开放的接口,而不用去关心内部的实现。
2)实现:将属性私有化;仅提供公开的方法(一个负责获取内容(get),一个负责修改内容(put))访问私有属性。
3)优点:提升了代码的安全性和隐私性;能减少耦合;类内部的结构可以*修改;
3.多态:一个对象在不同时刻体现出来的不同状态(一对多的关系)(父类引用子类对象)
1)实现:
重写:子类重写父类方法的实现,它是一种垂直层次关系。
重载:指一个类中,存在方法名相同,但参数(个数、顺序、类型)不同的方法,它是一种水平层次关系。
2)重写和重载的区别?
重写是一种垂直关系,它是子类重写父类的方法,要求结构相同;而重载是一种水平关系,它是类内部书写多个相同名称的方法,它们通过形参列表来区分。
3)在形参声明过程中,一般会声明的范围比较大,就可以传递父类也可以传递子类,代码的通用性就比较强。
4)多态可以分为两种类型:编译时多态(方法的重载)和运行时多态(方法的重写)。
运行时多态依赖于继承、重写和向上转型,向上转型是自动的,father f = new children(),不需要强转;向下转型需要强转,即children c =(children) new father()。
5)java中重写的两同两小一大规则:
a. 方法名相同、参数列表相同;
b. 子类方法返回类型<=父类方法返回类型
c. 子类方法抛出异常<=父类方法抛出异常
d. 子类方法访问权限>=父类方法访问权限
声明为final和static的方法不能被重写;如果一个方法不能被继承,则不能被重写。