面向对象
目录
- 面向对象
- 程序生长
- 类和对象
- 什么是类
- 什么是对象
- 封装
- 封装对象的属性和方法
- 封装的范围
- 继承
- 类的继承
- 多态
- 子类对象同时也是父类对象
面向对象
- 相对于面向过程来说
- 程序是不断生长的,停止生长意味着程序的死亡
- 程序扩展而不用修改原有的代码
类和对象
类
-
什么是类?
- 对象模版类
- 实现各种功能
- 测试类
- 程序的起点包含有main方法
- 实例化各种模版类的对象
- 对象模版类
-
类的加载
- 类在static成员被调用时加载
-
类的组成
- 属性(状态)
- 默认都是private
- 如果是final static则可以为public
- 方法(功能行为)
- 封装方法(类中脆弱的部分通常不允许访问)
- 接口方法(提供服务)
- 属性(状态)
-
类的种类
- 按访问权限分
- public
- default
- private(只限内部类)
- 按所在的位置分
- 内部类
- 外部类
- 按抽象等级分
- 普通类
- 抽象类
- 接口
- 按访问权限分
-
类的复用方式
- 组合
- 继承(本质是组合)
对象
- 什么是对象
- 各种对象的互相操作构成了java程序
- 对象有状态和行为和标识
- 状态:变量
- 行为:方法 提供服务
- 标识:对象的地址
- hashCode()方法返回对象唯一标识
- 对象的生命周期
- 创建方式
- new
- newInstance()
- clone()
- 创建对象的过程
- 加载类 此时要初始化static属性
- 实例化对象
- 初始化普通属性
- 调用构造方法
- 垃圾回收
- 对象的所有引用都消失
- 创建方式
类和对象
- 类是对象的模版,对象在类中实例化。
- java程序是对象的各种操作
封装
- 为什么要使用封装 Encapsulation ?
封装是为了隐藏具体实现
怎么理解呢。首先要明确类库设计者和客户端程序员的概念。
类库包括隐藏的部分和公开的部分。
客户端程序员只能访问公开的部分。
客户端程序员无法触及他们不应该触及的部分(脆弱的部分)--这部分对数据类型的内部操作是必须的,但并不是用户解决特定问题所需的接口的一部分。
这样做的好处是类库库设计者可以改变类内部的工作方式(提高运行速度)而不用担心会影响到客户端程序员。
继承
- 为什么要使用继承 Inheritance ?
一句换总结:继承是为了代码复用
首先要明白组合的概念。
组合是通过在新类中产生现有类的对象的形式来实现的,这样新类的对象就拥有了现有类的对象进而可以访问它的接口。
很多类有相同的方法和属性,如果每个类都要写相同的代码肯定是不合适的。所以就有了父类,然后子类使用extends关键字就可以得到所有的方法和属性。
貌似也可以用组合实现,但是没有继承直观。
要记住一点:继承的本质是组合。
当创建一个导出类对象时,该对象包含一个基类的子对象。这个子对象和用基类创建的子对象是一样的。
多态
- 为什么要使用多态 Polymorphism ?
一句话总结:多态将接口和实现分离
通常来说程序是不断生长的,不更新的程序意味着死亡。
在程序生长的时候,我们不希望过多的修改原有的代码。
解决办法是:我们只编写与接口打交道的代码,这样我们就可以放心的添加实现接口的导出类而不用修改原有的代码。
多态的本质是后期绑定
References
- 《Java编程思想》
Three passions, simple but overwhelmingly strong, have governed my life: the longing for love, the search for knowledge, and unbearable pity for the suffering of mankind