ch05 面向对象(一)
参考学习源码:github源码_面向对象
类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在。
Java面向对象三大特征:封装,继承,多态。
5.1 类和对象
-
成员变量用于定义该类的实例所包含的状态数据;方法则用于定义该类或该类的实例的行为特征或功能实现;构造器用于构造该类的实例。\
-
this 关键字总是指向调用该方法的对象。最大作用就是让类中的一个方法,访问该类里的另一个方法或实例变量。
5.2 方法详解
-
同一个类的方法调用另外一个方法,如果被调用的是普通方法,则默认使用this作为调用者,如果被调用的是静态方法,则默认使用类作为调用者。\
-
Java的方法参数传递只有一种,就是值传递。就是将实际参数值得副本(复制品)传入方法内,而参数本身不会受到任务影响。\
-
方法递归:一个方法体内调用自身。递归一定要向已知方向递归。\
-
方法重载:同名不同参。
5.3 成员变量和局部变量
5.4 隐藏和封装
-
封装:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。\
-
控制符:private < default < protected < public\
-
模块设计追求高内聚(尽可能把模块的内部数据、功能实现细节隐藏在模块内部独立完成,不允许外部直接干预),低耦合(仅暴露少量的方法给外部使用)。\
5.5 深入构造器
5.6 类的继承
-
Java具有单继承的特点,每个子类只有一个直接父类。
-
方法重写(覆盖):子类包含与父类同名的现象。遵循“两同两小一大”规则。方法名、形参列表相同;子类方法返回值类型应比父类方法的返回值类型更小或相等,子类方法
声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;子类方法的访问权限应比父类方法的访问权限更大或相等。\ -
super用于限定该对象调用它从父类继承得到的实例变量或方法。\
-
在一个构造器中调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类构造器使用super调用来完成。\
-
super调用的是其父类的构造器,而this调用的是同一个类中重载的构造器。\
5.7 多态
多态:编译时和运行时类型不一致。
5.8 继承与组合
- 继承要表达是一种"是(is-a)"的关系,而组合表达的是"有(has-a)"的关系。
5.9 初始化块
-
初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。\
-
类初始化阶段,先执行最顶层父类的初始化块,然后依次向下,直到执行当前类的静态初始化块。\
-
对象初始化阶段,先执行最顶层父类的初始化块,最顶层的父类构造器,然后依次向下,直到执行当前类的初始化块,当前类的构造器。