第三章
类与继承
本章内容
? 类与对象
? 面向对象特征
? 关键字 static的使用
? 关键字 final的使用
课前思考
1,对象和类是什么样的关系?
2,面向对象编程的特性是哪三个?
3.1 类和对象
3.1.1 类声明
class 类名 [extends 父类名 ] [implements 接口
列表 ]
{类体 }
3.1.2 类体
类中含有两种成员:成员变量, 成员方法 。
?成员变量
成员变量的声明方式如下:
[public | protected | private ] [static]
[final] type 变量名 ; //成员变量
其中,
static,静态变量 (类变量 );相对于实例
变量 final,常量
?成员方法
方法的实现包括两部分内容:方法声明和方法体。
方法声明中的限定词的含义:
? static,类方法,可通过类名直接调用
? abstract,抽象方法,没有方法体
? final,方法不能被重写
?方法声明
方法声明包括方法名、返回类型和外部参数。其
中参数的类型可以是简单数据类型,也可以是
复合数据类型。
?方法体
方法体是对方法的实现,它包括局部变量的声明
以及所有合法的 Java指令。
3.1.3 关键字 this
在一个方法内,如果局部变量和成员变量
的名字相同,则局部变量被隐藏,若要访
问成员变量,要在变量名前加
上” this.,”,this表示当前对象的引用。
3.1.4 方法重载
方法重载是指多个方法享有相同的名字,
但是这些方法的参数必须不同,或者是参
数的个数不同,或者是参数类型不同。返
回类型不能用来区分重载的方法。
3.1.5 类的继承
通过继承实现代码复用。 Java中所有的类都是
通过直接或间接地继承 java.lang.Object类得
到的。继承而得到的类称为子类,被继承的
类称为父类。子类不能继承父类中访问权限
为 private的成员变量和方法。子类可以重写
父类的方法,及命名与父类同名的成员变量。
但 Java不支持多重继承,即一个类从多个超
类派生的能力。
类继承的传递性。
3.1.6 类的初始化过程
当创建一个对象时,对象的各个变量根据
其类型被设置为相应的默认初始值,然后
调用构造方法,而每次调用构造方法都是
要执行三个阶段:
1、调用超类的构造方法;
2、由初始化语句对给变量进行初始化;
3、执行构造方法的体。
3.1.7 源文件
若源文件中不包括 public类或者接口,文件
名字可以是任意合法的文件名。
Javac *.java; Javac 主方法所在的类
3.2 面向对象特性
3.2.1 封装
java中类的限定词的作用范围比较
同一个

同一个

不同包
的子类
不同包
非子类
private *
default * *
protected * * *
public * * * *
3.2.2 继承
创建子类
格式:
class SubClass extends SuperClass {

}
3.2.3 多态
在 java语言中,多态性体现在两个方面:由
方法重载实现的静态多态性(编译时多态)
和方法重写实现的动态多态性(运行时多
态)。
? 编译时多态
在编译阶段,具体调用哪个被重载的方法,
编译器会根据参数的不同来静态确定调用
相应的方法。
?运行时多态
由于子类继承了父类所有的属性(私有的
除外),所以子类对象可以作为父类对象
使用。程序中凡是使用父类对象的地方,
都可以用子类对象来代替。一个对象可以
通过引用子类的实例来调用子类的方法
3.3 关键字 static 的使用
如果在声明时不用 static 关键字修饰,则声明为实例变
量和实例方法。
?实例变量和类变量
? 每个对象的实例变量都分配内存,通过该对象来访问
这些实例变量,不同的实例变量是不同的。
? 类变量仅在生成第一个对象时分配内存,所有实例对
象共享同一个类变量,每个实例对象对类变量的改变
都会影响到其它的实例对象。
? 类变量可通过类名直接访问,也可以通过实例对象访
问类变量。
?实例方法和类方法
类方法可以由类名直接调用,也可由实例对象进
行调用。类方法中不能使用 this或 super关键字。
实例方法
类方法
实例变量 实例方法 类变量 类方法
可以 可以 可以 可以
可以 可以不可以 不可以
实例方法和类方法访问权限示意图
3.4关键字 final 的使用
3.4.1 final变量
final变量,则为常量,例如
修饰成员变量时,定义时同时给出初始值,
而修饰局部变量时不做要求。
3.4.2 final 方法
final修饰的方法不能被子类重写。
final returnType
methodName(paramList){

}
3.4.3 final 类
final修饰类,则类不能被继承
final class 类名 {

}
小结
? 面向对象的许多概念在我们一般的日常生活
中一直在使用,当你融这样的情境之中,你
会感到面向对象程序设计是多么的直观和容
易。
? 面向对象程序设计中,除了封装和多态,重
要的还有复用,复用并不是简单的重复使用,
而是要通过继承增添一些新的特性,生活中
又何尝不是这样的呢?所以用生活的态度来
体会面向对象的观念吧,相信它会帮你好运!
? 【 课后任务 】
习题,
课后习题 3.1 3.2 3.5