面向对象
一.什么叫面向对象
把一组数据结构和处理他们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)/泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派(dynamic dispatch)。
二.面向对象三大特征
封装,继承,多态;
抽象:把一类对象共同特征进行抽取构造类的过程,包括两种抽象:1.数据抽象,即对象的属性;2.过程抽象,即对象的行为;
封装:可以隐藏实现细节,使代码模块化
继承:可以拓展已存在的代码模块(类),实现代码重用。
多态:类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性的正确调 用,实现接口重用。
Java多态机制:重载与重写
重写是外壳不变,核心变。也就是说方法名不变,参数不变,具体实现可以改变。一般是在父类中声明方法,在子类中重写。
重载是方法名不变,但参数一定要变。而且重载的方法一般都写在一个类中。用一张图来表示区别如下:
区别点
重载
重写
参数列表
必须修改
一定不能修改
返回类型
可以修改
一定不能修改
异常
可以修改
可以减少或删除,一定不能抛出新异常或更广的异常
访问
可以修改
一定不能做更严格的限制(可以降低限制)
三.接口与抽象类的区别
接口是公开的,里面不能有所有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量;
实现接口的一定要实现接口里定义的所以方法,而实现抽象类可以选择性的重写需要用到的方法。
接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(无任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
从设计层面来说,抽象类是对类的抽象,是一种模板设计;而接口是对行为的抽象,是一种行为的规范。