再次学习J2SE,不得不慨叹自己对这部分基础内容掌握的并不牢靠,因此再在这里进行总结。面向对象的基础思想在这里不再提及,此文只针对java中的面向对象的基础内容进行讲述。
封装
(1)属性
①变量(静态属性)
成员变量可以是java中的任何一种数据类型,定义时如不初始化java可默认对其初始化,初始化值为:
类型 |
byte |
shot |
int |
long |
char |
float |
double |
boolean |
引用 |
取值 |
0 |
0 |
0 |
0L |
'\u0000' |
0.0F |
0.0D |
false |
null |
对应的方法内部或语句块内的局部变量定义时必须对其显示的初始化,否则编译无法通过。
②方法(动态属性)
一段用来完成特定功能的代码片段。
a.构造方法
构造对象时执行的方法,即在执行new()过程中将调用,可用于初始化对象的成员变量;
java默认构造方法为空;
子类构造将先执行父类对象的构造方法super(argument_list),再执行继承类构造方法。
b.方法重载
一个类中定义有相同名字,但参数不同(个数、类型)的多个方法;
调用时,会根据不同的参数表,选择不同的方法;
返回值的类型必须相同,否则这些方法视为重名,编译不能通过。
c.方法重写
继承方法可在子类中得到重新实现;
需要保证与父类方法名称、参数列表、返回类型一致;
访问权限不能够更严格。
(2)存储(内存分析)
类在内存中的代码区存在,是静态的概念,而new出的对象位于堆内存(heap),对象通过引用对其进行操作,这里的引用相当于C++中的指针,因此对象在内存中应用实际占用两块存储空间。类及对象在内存分布如图:
从图中可以看出:
a.引用类型数据在内存中的存储占用两部分存储空间;
b.一个类的不同对象有各自的成员变量存储空间;
c.一个类的不同对象共享该类的方法。
继承
(1)特点
a.通过继承,子类自动拥有基类所有成员;
b.Java只支持单继承,不支持多继承,但可以通过实现多个接口达到多继承效果;
c.Object类是所有Java类的根基类。
(2)存储(内存分析)
|
图中所示:
a.类c的子类对象CC中包含有父类的全部成员
b.使用super关键字可以调用包含的父类对象成员
c.使用this关键字调用实例化对象
多态
执行期间判断所引用对象的实际类型,根据实际类型调用其相应的方法
(1)条件
a.存在继承或实现;
b.存在重写;
c.父类引用指向子类对象。
(2)实现
多态的具体分析见博客:java中的多态及其内存分析
总结
封装、继承、多态是面向对象分析的三个主要方面,每次的学习都会有不同的感受,通过今天的重复与练习,也进一步体会到面向对象给我们程序带来的复用性及扩展性的灵活,使我们的程序更富有生命力。