Java面向对象01
- 三大特征
- 封装
- 继承
- 多态
- 封装 Encapsulation
- 封装就是将信息屏蔽 将信息保护起来
- 系统应该考虑部分内容应该是仅供内部使用的 减少各个部分的信息联系
- 合理使用封装 能够有效解耦合
- 封装的安全性很高 也便于维护
- 封装就是将信息屏蔽 将信息保护起来
- 继承
- 让子类及其对象获得其父类提供的属性和方法
- 能够有效提供代码的复用率
- 良好的继承结构 可以提高代码可读性
- 继承的存在 使得方法覆盖和多态得以存在
- 多态
- 对于相同的行为因对象的不同而出现的多种表现状态
- 当子类继承父类或者实现了某些接口时 父类或接口可以在编译阶段接收子类对象(自动向上转型) 当调用方法时 编译阶段编译器认为是父类执行 而运行阶段具体执行的子类的代码 这样一个对象在两个阶段中出现了不同的状态
class SuperClass {
public void doThings() {...}
}
class SubClass extends SuperClass {
// 子类重写了父类的方法
public void doThings() {...}
}
class Test {
public static void main(String[] args) {
// 父类接收了子类对象
SuperClass obj = new SubClass();
// 在编译阶段 编译器obj对象是SuperClass类型 故自然可以调用其中的doThings方法
// 这个时候称作静态绑定
obj.doThings();
// 在实际的运行阶段 obj引用指向的是一个SubClass类型的对象 调用其doThings方法
// 最终会调用子类重写后的方法
// 这个时候称作动态绑定
}
}
转型
- 向上转型 UpCasting
- 父类接收子类对象 自动转型
- 向下转型 DownCasting
- 子类接收父类对象 需要手动转型
- 必须强制类型转换 如果转换出错会弹出异常
java.lang.ClassCastException
- 这个异常是运行时异常 Java编译器不会检测异常是否处理
- 在类型转换之前为了不出错 通常建议使用
instanceof
运算符进行检测 是否为其实例
面向对象开发过程 术语
简写 | 全称 | 翻译 |
---|---|---|
OOA | Object-Oriented Analysis | 面向对象分析 |
OOD | Object-Oriented Design | 面向对象设计 |
OOP | Object-Oriented Programming | 面向对象编程 |
面向对象与面向过程
- 面向对象 Object-Oriented
- 特点
- 面向对象关心的对象 关心对象拥有什么功能 能做什么 有什么属性
- 与人的思考方式更加贴近 更加自然
- 优点
- 系统的耦合度较低
- 便于扩展业务
- 缺点
- 面向对象方式的设计成本较高 耗费资源
- 特点
- 面向过程
- 特点
- 面向过程关心实际的方法 一件事的做法 不关心谁做 只关心要怎么去做
- 优点
- 开发速度块 开发成本低
- 缺点
- 面对复杂情况时难以下手
- 系统耦合度较高
- 系统扩展性较低
- 特点
面向对象OCP原则
- OCP原则 Open-Close Principle
- 开发-封闭原色
- 一个软件应该对扩展开发 对修改封闭
- OCP原则是整个面向对象开发可复用设计的基石 是最重要的原则之一
- Open意味着要对组件功能扩展开发 允许后续开发者对其进行业务扩展
- Close意味着要对原有代码修改关闭 不允许修改原有代码结构
- OCP原则的实现思路
- 使用抽象类/接口的方式 即面向抽象编程 面向接口编程
- 使用抽象类/接口定义好模版 将方法真正的实现延迟至子类中
- 而且可以通过多态接收实现好的对象 能够使业务直接分离 系统耦合度降低
Java类
- 定义方式
- 使用class关键字定义一个类
访问修饰符 class 类名 { 类体 }
-
类是引用数据类型 使用时需要实例成对象来使用 使用
new
关键字 -
类是一种模版 对象则是使用模版生产的实际物品
-
类实例化后则是对象
- 对象存储在堆内存中 使用
new
关键字就会在堆内存开辟新空间 用于存储对象 - 访问对象使用引用 即引用数据类型指向对象
- 对象存储在堆内存中 使用
-
类的属性
- 类中的成员变量 称作属性
修饰符 变量类型;
- 类的成员变量未指定初始值的时候 JVM实例化时会赋予默认值
-
类的行为
- 类中的方法 称作行为
- 方法有修饰符 返回类型 方法名 参数列表 方法体 组成
修饰符 返回类型 方法名(参数列表) { 方法体 }
-
属性和行为也有修饰符 与类的修饰符类似
Java访问修饰符
- 定义访问权限 用于修饰类/属性/行为
public
protected
- 缺省
private
修饰符 | 类中访问 | 包中访问 | 子类访问 | 外部任意 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
缺省 | √ | √ | × | × |
private | √ | × | × | × |