第四章
4.1认识类与对象
对象(先)—类(后)
对象--特征:属性-成员变量;行为-成员方法
4.1.1类
4.1.2定义类
类的定义格式
class 类名{
所含变量定义;(1、成员变量 2、成员方法 )
}
方法的定义,格式:
访问权限 返回类型 方法名(参数列表)
{
//方法体
[return值;]
}
4.1.3使用类实例化对象
格式:
类名 对象名= new 类名(); (类名 对象名; new 类名();)
类命名的规则:
类名的首字母使用大写字母
见名知意,几个单词复合时,每个单词的首字母大写。
4.1.4访问对象中的成员变量
通过对象名使用成员变量的方法:
对象名.成员变量名
4.1.5对象的引用性质
对象名:引用类型传递
this:是对象名,是自身对象的引用
this.成员变量
this.成员方法();
区别:定义方法时-形参;调用方法时-实参
成员变量:每个类的定义的类型都有一个初始变量
(0,0.0,false,’\u000’,null)
4.2认识成员函数
4.2.1成员函数
参数基本数据类型-值传递
参数引用数据类型-引用传递
4.2.2定义和使用成员函数
最简单的成员函数
格式:
Void 函数名称(){
函数内容;
}
加入参数的成员函数
格式:
Void 函数名称(类型1参数名1,类型2参数名2,...,类型n参数名n,){
函数内容;
}
带返回类型的成员函数
格式:
返回类型 函数名称(类型1参数名1,类型2参数名2,...,类型n参数名n,){
函数内容;
return和函数返回类型一致的某个变量或对象;
}
4.2.3函数参数的传递
简单数据类型采用值传递
引用数据类型采用引用传递
4.2.4函数重载(Overload)
方法的重载描述的是一种现象,假设现在存在一个方法,现在我又新建了另外一个方法,该方法我们称为新方法,我们让新方法方法名与原方法相同,而形式参数列表与原方法不同。这就叫做方法的重载。
但是不能盲目的将函数定义为一样,必须满足以下条件之一:
函数参数的个数不同。
函数参数的个数相同,类型不同。
函数参数的个数相同,类型相同,但是在参数列表中出现的顺序不同。
4.3认识构造函数
4.3.1构造函数
this(name);
this(name,sex);
只能构造函数关系之间使用
4.3.2定义和使用构造函数
定义时需遵循一下原则:
函数名称与类的名称相同。
不含返回类型。
定义了构造函数之后,在实例化对象时必须传入相应的参数列表,否则会报错,其使用方法如下:
类名 对象名=new 类名(传给构造函数的参数列表);
第五章
5.1静态变量和静态函数
5.1.1静态变量
静态方法中没有this 关键词
static: 类名.类变量;
类名.类方法();
静态代码块(静态初始化器)
比较:静态变量和成员变量
所属不同
静态变量属于类,所以也称为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
5.1.2静态变量的常见应用
保存跨对象信息
存储对象个数
5.1.3静态函数
有静态变量就有静态函数,静态变量和静态函数统称为静态成员。
5.1.4静态代码块
5.2认识封装
5.2.1封装
5.2.2实现封装
5.3使用包
5.3.1包(Package)
包:类的容器,用于分隔类名空间
包管理类--可以避免重名问题
5.3.2将类放在包中
5.3.3访问包中的类
这些类在java.lang包中。
在同一个包中直接用类名来访问,不用指定类所在的包。
两个类不在同一个包中的情况。
5.4使用访问控制修饰符
5.4.1访问控制修饰符
5.4.2类的访问控制修饰符
注意:如果将一个类定义成public类,类名和文件名必须相同,因此在一个.java文件中最多只能有一个public类。
5.4.3成员的访问控制修饰符
(同一个)类 、 包 ;(不同包的)子类 、非子类
Private √
默认的 √ √
Protected √ √ √
Public √ √ √ √
5.5使用类中类
第六章
6.1使用继承(略)
6.2成员的覆盖
屏蔽/覆盖:变量的隐藏;方法重写(override)
覆盖/重写(override):如果子类中的函数定义和父类相同,最后调用时是调用子类中的方法。
子类中成员函数的定义和父类相同:指名称相同,参与列表相同,返回类型相同。
当用父类对象表示子类对象时,父类对象称为子类对象的上转型对象。
当一个父类对象表示的是子类对象时,还可以将该父类对象强制转化为子类对象。
A a=new B(); //对象的上转型
B b=(B)a; //对象的下转型对象
当用一个父类对象表示子类对象后,父类对象
可以访问父类的变量
可以调用子类继承父类的方法被子类重写的方法
不能访问子类特有的变量和方法
6.2.2成员覆盖的作用
最大的作用是在不改变源代码的情况下能够对一个模块的功能进行修改。
传统方法是修改ImageOpe源代码,但是修改源代码意味着读懂源代码,代价很大,更何况可能得不到源代码。
6.3使用多态
6.3.1多态
多态:具有表现多种形态的方法的特征
6.3.2使用多态
函数传入的形参可以是父类类型,而实际传入的可以是子类对象;
函数的返回类型是父类类型,而实际返回的可以是子类对象。
6.3.3父类和子类对象的类型转换
子类类型对象转换成父类类型
父类类型对象转换成子类类型
6.4抽象类和接口
6.4.1抽象类
关键字abstract修饰的类称为抽象类
abstract:抽象方法(); 抽象类
abstract class 类名
{
实例方法(){}
抽象方法;
}
[访问权限] abstract 数据类型 方法名([参数列表]);
注意
抽象类不能被实例化;
抽象函数必须被重写,除非子类也是抽象类;
在抽象类中可以含有普通成员函数。
6.4.2接口
接口:由若干常量和抽象方法组成的集合,接口中的方法只有声明没有实现
接口是对抽象类的进一步抽象
在Java中单继承,多接口
格式:
[修饰符]interface接口名[extends 父类.接口列表]
{
[public][static][final]数据类型 变量名=常量值;
[public][abstract]返回值类型 方法名(参数列表)‘
}
实现接口,格式:
{
成员变量和成员方法;
重写接口A中的所有方法;
重写接口B中的所有方法;
}
实现接口的多态性,使用接口回调技术
接口名 对象名=new 实例类构造方法();
6.5其他(略)
6.6工具的使用(略)