2013.11.6
第三章、类的封装、继承和多态
1、类和对象:
申明类:
格式 [修饰符] class 类<泛型> [extends 父类] [implements 接口列表]
声明成员变量和成员方法:
[修饰符] 数据类型 变量 [=表达式],{,变量[表达式]}
[修饰符] 返回值类型 方法([参数列表]) [throw 异常类]
{
语句序列;
[return [返回值]]
}
成员方法重载
2、对象:
类是用于定义数据及对数据的操作的构造数据类型,类本身不参与程序的运行,实际参与运行的是类的对象,对象是类的实例,及类的取值。
对象是动态的,每个对象都有自己的生存周期,都会经历一个从创建、运行到消亡的多种变化过程
声明对象:类 对象 声明对象仅仅说明了对象所属的类,必须通过赋值才能使对象获得实例。
创建实例:使用new运算符可调用一个类的构造方法,创建一个类的实例,为实例分配并初始化。
引用对象的成员变量和调用成员方法:java的内存管理机制。能够跟踪存储单元的使用情况,自动收回不在被使用的的资源,所以,程序中不需要释放对象占用的空间资源。
对象的引用模型:java的类是引用数据模型,两个对象之间是引用赋值,对象赋值过程中没有创建新的实例。
对象的关系运算与比较运算:使用关系运算符==、!=可以比较两个对象是否引用同一个实例
一般情况下,两个对象相等,是指他们引用的两个实例的各个成员变量值分别对应相等,java约定一个类equals()方法用于比较该类的两个对象是否相等。
3、类的封装性:包含两层含义:①将数据和对数据的操作组合起来构成类,对象是一个不可分割的独立单位②实现 信息隐藏,类既要提供与外部联系的方法有要尽可能的隐藏细节
主要实现的方法有:构造函数、析构函数、设置访问控制权限
4、构造方法:与类同名,通过new运算符调用
默认构造函数:当一个类没有申明构造方法的时候,java自动提供一个无参数的默认构造方法。对各成员变量按其数据类型进行初始化。
拷贝构造函数:与C++ 拷贝构造函数的区别
构造方法重载
5、this引用和instanceof对象运算符:java中每个成员方法都可以使用代词this引用调用该方法的当前对象
This引用用法:①指代对象本身:用于指代调用成员方法的当前对象自身this②访问本类的成员变量和成员方法,使用this.成员变量 this.成员方法()③调用本类构造函数,用在重载的构造方法中,调用本类已定义的构造方法
Instanceof对象运算符,判断一个对象所引用的实例是否属于指定其子类,运算结果是boolean类型
6、访问控制:
类的访问控制权限:类有两种访问控制权限:共有和缺省,公有权限使用public修饰符,可以被所有类访问,缺省权限没有修饰符,可被当前包中(当前文件夹)中类所访问。
类中成员的访问控制权限:①private声明私有成员,该成员仅能被当前类的成员访问②没有修饰符表示缺省权限,说明该成员能被当前的类以及包中其他类所访问③protected声明保护成员,该成员能被当前类及其子类或当前包中其他类访问,也称在子类中可见④public声明共有成员,该成员可被所有类访问
声明set()和get()方法存取对象属性
7、静态成员:java类中的成员分为两种:实例成员和静态成员(使用关键字static声明的成员为静态成员(也称为类成员))否则为实例成员。
实例成员:属于对象,只有创建了实例,才能通过对象访问实例成员变量和调用实例成员的方法。
静态成员:属于类,即使没有创建实例,也可以通过类名直接访问静态成员变量
8、析构方法:用于释放实例并执行特定的操作;java的析构方法声明如下
Public void finalize()
Java的内存管理机制能够自动释放不在被使用的对象
注意:一个类中只能有一个finalize()方法,通常,当对象超出他的作用域时,java将执行对象的析构方法,一个对象也可以调用析构方法释放自己
Eg:d.finalize()
9、浅拷贝与深拷贝:
浅拷贝:一个类的拷贝构造方法,使用已知实例对新创建的实例的成员变量逐个赋值,这种方法称为浅拷贝:eg:当对象的成员变量是基本数据类型时,两个对象的成员变量已有存储空间,赋值运算传递值,所哟浅拷贝能够复制值
深拷贝:当对象成员变量引用数据类型时,浅拷贝不能实现对象的复制功能,需要深拷贝
因此:当一个类中包含引用类型的成员变量时,该类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建实例,斌初始化为形式参数实例值,这种复制方式称为深拷贝。
10、类的继承性
由继承派生类:
[修饰符] class 类 <泛型> [extends 父类] [implements 接口列表]
注意:java是单继承的,一个类只能有一个父类,不能有多个父类。
继承原则:①子类继承父类的成员变量②子类继承父类除构造方法以外的成员方法,包括实例成员方法和静态成员方法③子类不能继承父类的构造方法。④子类可以增加成员,可以重定义从父类继承的成员,但不能删除它们
子类对父类成员的访问权限:①子类不能访问父类的私有成员②子类能够访问父类的公有成员和保护成员③子类对父类的缺省权限成员的访问控制,以包为界分为两种情况,可以访问当前包中的父类缺省权限成员,不能访问其他包中父类的缺省权限成员。
11、子类的构造方法:子类构造方法必须调用父类的某一个构造方法。
注意:使用super()调用父类的构造方法 语法格式: super([参数列表])
默认执行super( )
12、类的多态性:
子类重定义从父类继承的成员:①重定义父类的成员变量,则隐藏父类的成员变量②重定义父类的成员方法,如果参数列表相同,则覆盖父类的成员方法,否则重载
注意:在子类的成员方法中,如果需要引用被子类隐藏的或是被覆盖的成员,可使用super引用,语法格式: super.成员变量 super.成员方法([参数列表])
类型的多态:子类通过继承方式扩充和发展继承约定了子类与父类之间存在的isA关系,子类是父类的一种特殊类型
hasA关系表示一个对象使用另一个对象来存储自身的状态
注意:子类对象即是父类对象,父类对象引用子类实例
编译时多态和运行时多态:
编译时多态:方法重载都是编译时多态
13、类的抽象性:
抽象类:
声明抽象类与抽象方法:使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法称为抽象方法,抽象方法只有方法声明没有方法体。
抽象类的特点:一个抽象类可以不包含抽象方法,但是包含抽象方法的类必须声明为抽象类
注意:构造方法,静态成员方法不能被声明为抽象方法
最终类:
声明最终类:最终类不能被继承,即不能声明该类为最终类,使用关键字final声明最终类
注意:抽象类不能被声明为最终类
声明最终方法:最终方法不能被子类覆盖
第四章、接口、内部类和javaAPI基础
1、接口:是一组抽象方法、常量和内嵌类型的集合
是一种数据类型
注意:一个类可以实现多个接口,提供功能实现并进行类型扩展
接口是设计的表示,而类则是设计与实现的混合体
一个接口可被多个类实现,接口提供方法申明与方法实现相分离的机制,使实现的多个类表现出共同的行为能力。
声明接口:使用关键字interface
[public] interface 接口<泛型> [extends 父接口列表]
{
[public] [static] [final] 数据类型 成员变量 = 常量值
[public] [abstract] 返回值类型 成员方法[(参数列表)]
}
申明实现接口的类:用关键字implements声明一个类将实现指定接口
[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]
一个类可以实现多个接口,多个接口之间用逗号分隔,实现接口的非抽象类必须实现所有指定接口的所有抽象方法。
接口是一种引用数据类型,申明一个接口I就是定义了一种类型,该类型的值集为所有实现接口I的类及其子类的实例,该类型的操作集为接口I中声明的所有方法。
2、java用接口实现多继承,
接口与抽象类的区别:①抽象类为子类约定方法声明,并给出部分实现,包括构造方法等;抽象方法在多个子类中表现出多态性。类的单继承,使得一个类只能继承一个类的约定和实现。②接口为多个互不相关的类约定某一特性的方法声明,在类型层次中变大对象拥有属性。接口是多继承的。
3、内部类和内部接口:是声明在其他类或内部的内嵌类型。包含内嵌类型的类或接口称为外层类型。
内嵌类型的目的:类型嵌套和对象嵌套
作为类型的特性:①内嵌类型不能与外层类型同名②内部类中可以申明成员变量和成员方法,内部类成员可以与外部类成员名相同③内部类可以继承父类或实现接口④内部类可以申明为抽象类,但该抽象类必须被其他内部类所继承;内部接口必须被其他内部类实现。
作为成员的特性:①使用点运算“.”引用内嵌类型②作为成员,内嵌类型与其外层彼此信任,能访问对方的所有成员③内部类中成员的4中访问控制权限。④内部接口总是静态的,可声明内部类是静态的,静态内部类能够声明静态成员,但不能引用外部类的实例成员,非静态内部类不能声明静态成员。
4、java.lang包中的基础类库
主要包括Object类,基本数据类型包装类,数学类,字符串类,线程类,异常类
Object类:java类层次的根,其他类的祖先类,提供类的基本方法
Math数学类:数学函数和常数
Cloneable可克隆接口:支持类的克隆,标记接口
Comparable 可比较接口:约定对象比较大小的方法
基本数据类型包装类
String字符串类
System和Runtime类 系统和运行时类,提供访问系统和运行时的环境资源
Class类操作类 提供类名、父类及类所在的包等信息
Error错误类和Exception异常类: Exception类处理异常,Error类处理错误
Thread线程类和Runnable接口 提供多线程环境的线程管理和操作类的接口
5、Object类
Object是java中其他类的父类或是祖先类,他定义了一个java对象所需要的基本操作和属性,Object类申明如下:
Public class Object
{
Public object();
Public String toString();
Public boolean equals(Object obj); //比较当前对象与obj是否相等
Protected void finalize()throws Throwable
Public final native Class<?extends Object>getClass(); //返回当前对象所属的类
Public int hashCode(); //返回散列表
Protected native Object clone() throws CloneNotSupportedException://克隆当前对象
}