面向过程和面向对象
C是面向过程的,C++是半面向过程半面向对象的,Java是面向对象的。
面向过程
注重步骤,注重实现功能的因果关系,是一种自顶而下的编程方式
如:因为A所以B,因为B所以C
缺点:耦合度高,扩展能力差
优点:占用资源相对低,速度相对快
面向对象
注重功能的实现,更符合人类的思维方式
将事物高度抽象化的编程模式
优点:耦合度低,扩展力强
缺点:占用资源相对高,速度相对快
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
面向对象三大特征
封装
把目标物体封装成抽像的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
常用于设置private数据类型来保护内部数据,对外提供set和get方法
继承
它可以使用现有类的所有功能,并在此基础上对某些功能进行扩展,通过继承的类称为“子类”,被继承的类称为“父类”
常用于子类extends父类,对父类的方法进行重写
多态
指一个类实例的相同方法在不同之上有不同表现形式,多态机制使具有不同内部结构的对象可以共享相同的外部接口
常用于父类引用指向子类对象(向上转型)
构造方法
当一个类中没有提供任何构造方法,系统默认提供一个无参的构造方法,叫做缺省构造器,当一个类中手动提供了构造方法,那么系统将不再提供默认无参构造方法
构造方法支持方法重载,在一个类中可以有多个,并且所有构造方法名字都一样
方法重载特点:同一个类中,方法名相同,参数列表不同
对于实例变量,如果没有赋值,系统会默认赋初始值
方法重写和重载
重载(Overloading)和重写(Overriding)
- 重载是一个编译期概念,重写是一个运行期概念
- 重载在编译时根据参数变量的类型判断调用哪个方法
- 重写在运行时根据引用变量所指的实际对象的类型来调用方法
- 重载不是多态,重写是多态
重写的条件
参数列表必须完全与被重写方法的相同
返回类型必须完全与被重写方法的返回类型相同
访问级别的限制性一定不能比被重写方法的强
访问级别的限制性可以比被重写方法的弱
重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常
重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明)
不能重写被标示为final的方法
如果不能继承一个方法,则不能重写这个方法
重载的条件
被重载的方法必须改变参数列表
被重载的方法可以改变返回类型
被重载的方法可以改变访问修饰符
被重载的方法可以声明新的或更广的检查异常
方法能够在同一个类中或者在一个子类中被重载
this和super
super:父类的引用
super.成员变量
super.成员方法名()
super(); 父类的构造方法
this:当前对象的引用
this.成员变量
this.成员方法名()
this(); 子类的构造方法
子类的每个构造方法均有默认的super(),调用父类的空参构造,手动调用父类构造会覆盖默认的super()
super()和this()都必须是在构造方法的第一行,所以不能同时出现
抽象类
使用abstract关键字修饰的方法是抽象方法,抽象方法只包含方法名,没有方法体。
修饰符 abstract 返回值类型 方法名(参数列表);
例:public abstract void run();
如果一个类包含抽象方法则该类为抽象类
abstract class 类名{
}
继承抽象的类的子类必须重写父类所有的抽象方法,否则,该子类也必须声明为抽象类
注意事项
- 抽象类不能创建对象,如果创建,编译无法通过而报错,只能创建其非抽象子类的对象
- 抽象类中可以有构造方法,是供子类创建对象时,初始化父类成员使用的
- 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
- 抽象类的子类,必须重写抽象父类中的所有的抽象方法,否则编译无法通过而报错,除非该子类也是抽象类