面向对象
面向对象和面向过程的区别
面向对象:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面积过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
什么是类?
类是描述实例对象抽象,由相似的对象组成的集合
什么是对象
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
对象的实例化过程
1、检查类是否加载,如果没有加载就加载这个类,要加载所有父类。
2、在内存堆中分配对象空间。属性默认自动初始化。自动初始化为“0”值。
3、进行属性的赋值
4、调用父类构造器。(默认调用父类无参数构造器!)
5、调用本类构造器
类和对象的关系
类是对象的抽象,而对象是类的具体实例
面对对象的特性(封装,继承,多态)
如果是四种要加上抽象
封装
封装就是将属性私有化,提供公有的方法访问私有对象。
封装可以维持数据安全性,维护维护程序的健壮性
实现封装的方式: 使用访问控制符
修饰符的访问权限:
修饰符 | 本类 | 同包 | 包外子类 | 包外其他类 |
---|---|---|---|---|
private | 是 | |||
默认的 | 是 | 是 | ||
preotected | 是 | 是 | 是 | |
public | 是 | 是 | 是 | 是 |
继承
使用extends关键字实现继承
继承父类的属性和方法
继承只支持单一继承,一个子类只能继承一个父类(接口可以多继承)
继承的特点:
- 子类继承父类的非private的属性和方法
- 构造器不能继承
- 实例化子类
继承的语法现象:
- 父类型变量可以引用子类型的实例,父类型的实例是多态的
- 引用变量类型的自动转换("小类型"到"大类型"的自动转换)
- 子类可以覆盖父类的方法,修改父类的行为
- 方法覆盖,子类覆盖父类"相同方法签名"的方法
多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态存在的三个必要条件:
- 继承
- 重写
- 父类引用指向子类对象
重载也是多态的一种
引用类型转换
- 向下转型(自动类型转换):是小类型到大类型的转换
- 向上转型(强制类型转换):是大类型到小类型的转换
- instanceof:用来判断引用对象的类型
重载与重写的区别
重载 (同一类中)
- 方法名相同
- 参数不一样(数量,类型,顺序)
- 参数名称的重载无关
- 返回值和重载无关
重写(父子类中)
- 方法名,返回值,参数列表必须完全一致
- 子类方法的访问级别不能低于父类的相应方法的访问级别
- 特点:
- 子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数,则新方法将覆盖原来的方法
- toString()、equals()、hashCode()都会重写