JavaWeb第5讲
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Class Student { String num; String name; int age; void attendClass( ) { System.out.println(“学生去上课”); System.out.println(“学生去上课 学生去上课” public static void main( String []args) { Student s1=new Student(); s1.attendClass(); } }
22
继承关系
父类
父类: 父类: 将被继承的类称 为父类, 为父类,也称基 类。 子类: 子类: 新定义的类称为 子类或派生类。 子类或派生类。
父类数据 父类方法
继承 子类 父类数据 子类新添加数据 父类方法 子类新添加方法
23
继承是 “is a ”关系
继承关系是“ 关系 public继承关系是“is a ”关系 class Employee { private String 继承关系是“一般与特殊”的关系 继承关系是name; “一般与特殊” private Date hireDate; 例如:雇员Employee类 例如:雇员 private Date dateOfBirth; 类,其子类可以包括经 private String jobTitle; ,一名 Manager { 显然, 理Manager类。显然 class 类 public 一名Manager首先是一 首先是一 private int grade; 即一名 位Employee,即一名Manager name;a ” , private String “is ... private 特殊” Employee关系 ,前者是“Date hireDate; 关系 前者是“特殊”,后者是
1. 单继承: 单继承: 只有一个父类的继承方式
2. 多继承: 多继承: 有多个父类的继承方式
25
单重继承
Java只允许单重继承。目的是让代码的可 只允许单重继承。 只允许单重继承 靠性更高。 靠性更高。 为了保留C++语言中多重继承的功能,提 语言中多重继承的功能, 为了保留 语言中多重继承的功能 出了接口的概念,后面再详细讲。 出了接口的概念,后面再详细讲。 一个子类继承其所有的父类( 一个子类继承其所有的父类(在树中通往 Object的路径上的类)中的属性及行为。 的路径上的类) 的路径上的类 中的属性及行为。
本节主要内容: 本节主要内容:
1 类和对象的概念 类和对象的概念——重点 重点 2 对象的构造和初始化 对象的构造和初始化——重点 重点 3 this关键字——了解 this关键字 关键字——了解
1
1 类/对象(object) 对象(
变量(数据) 方法 行为) 方法(行为 类:封装的实体 = 变量(数据)+方法 行为
10
2 对象的构造和初始化
说明了一个对象后,要调用 运算为新对 说明了一个对象后,要调用new运算为新对 运算 象分配空间, 象分配空间,此时系统会自动调用构造函数 也称构造方法)。 (也称构造方法)。 调用构造方法时系统自动完成如下步骤: 调用构造方法时系统自动完成如下步骤:
分配新对象的空间, (1) 分配新对象的空间,并对成员变量进行缺省 的初始化。 的初始化。 执行显式的成员初始化。 (2) 执行显式的成员初始化。 执行构造方法的方法体。 (3) 执行构造方法的方法体。
16
构造方法的特性
① ② ③ ④ ⑤ ⑥ ⑦
构造方法的名字与类名相同 没有返回值类型 必须为所有的成员变量赋初值 通常要说明为public类型的,即公有的 类型的, 通常要说明为 类型的 可以按需包含所需的参数列表 构造方法可以重载 构造方法不能继承
17
3 关键字 this
public class Student{ 两种用法: 两种用法 String name;: int age; ①this用来指代本类中的其他构造方法 用 public Student(String s, int n){ 用于指代当前对象。 ②this用于指代当前对象。 用于指代当前对象 name = s; age = n; } public Student(String s){ this(s, 20); 创建对象: 创建对象: } Student s1=new Student(“zhao”,18); public Student( ){ Student s2=new Student(“wang”); this(“Li"); Student s3=new Student(); } } 18
4
例2-1 一个学生类定义
Class Student{ String num; String name; int age; void attendClass( ) { System.out.println(“学生去上课”);} 学生去上课” 学生去上课 void setData( String s, String n, int a) { num=s; name=n; age=a;} }
8
}
成员方法的重载
方法的重载:同一个类内的多个方法具有 方法的重载: 相同的方法名,但形参不同。 相同的方法名,但形参不同。 例如: 例如: public void attendClass() {…}; public void attendClass(String s) {…};
9
重载方法几条规则
14
缺省的构造方法
每个类都必须至少有一个构造方法。 每个类都必须至少有一个构造方法。如果 程序员没有为类定义构造方法, 程序员没有为类定义构造方法,系统会自 动为该类生成一个缺省的构造方法。 动为该类生成一个缺省的构造方法。 缺省构造方法的参数列表及方法体均为空, 缺省构造方法的参数列表及方法体均为空, 所生成的对象的成员变量值为零或空。 所生成的对象的成员变量值为零或空。 如果程序员定义了一个或多个构造方法, 如果程序员定义了一个或多个构造方法, 则将自动屏蔽掉缺省的构造方法。 则将自动屏蔽掉缺省的构造方法。
例
public class Student{ String num; String name; int age; public static void main(String args[]) { Student s1 = new Student( ); System.out.println(“num=" + s1.num); System.out.println(“name=" + ); System.out.println(“age=" + s1.age); } }
public class Stduent{ 构造方法是特殊的类方法, 构造方法是特殊的类方法,有着特殊的功 在创建对象实例时由new运算符自动 能String num; 。在创建对象实例时由 运算符自动 String name; 调用。 调用。 Student( ) public 构造方法中参数列表的说明方式就决定了 { num = “1001”; name=“Tom”; } 该类对象的创建方式。 该类对象的创建方式。String n) public Student(String s, { num=s ; name=n;} } 在创建Student实例对象时,只能使用两种形式: 实例对象时, 在创建 实例对象时 只能使用两种形式: Student s1 = new Student( ); Student s2 = new Student(“1002”,“John”);
21
1 继承
Java中的类层次结构为树状结构,这和我 中的类层次结构为树状结构, 中的类层次结构为树状结构 们在自然界中描述一个事物是类似的。 们在自然界中描述一个事物是类似的。 例如:我们可以将动物划分为哺乳类动物 例如:我们可以将动物划分为哺乳类动物 动物 及爬行类动物, 及爬行类动物,然后还可以对这两类动物 继续细分。 继续细分。
系统只在创建类的第一个对象的时候为类的静态成员分配内存以后再创建该类的对象时将不再分配内存不同对象的类变量将共享同一内存空5555成员变量成员方法成员变量成员方法类变量类方法对象a对象b5656java语言中没有全局变量的概念类变量从某种意义上来说相当于其他程序设计语言中的全局变量
第5 讲 进一步讨论对象和类
12
类的构造方法 类的构造方法
构造方法:是类的一个特殊的成员方法, 构造方法:是类的一个特殊的成员方法, 方法名称和类名相同, 方法名称和类名相同,经常用于对类的成 员数据进行初始化,在创建( 员数据进行初始化,在创建(new)对象 ) 时自动调用。 时自动调用。
13
构造方法的调用 构造方法的调用
6
成员方法的调用
调用方法的格式: 调用方法的格式: 对象名. 方法名(参数表 参数表); 对象名 方法名 参数表 例如: 例如: Student s1=new Student( ); s1.setData(“110010”,“张三”,20); 张三” 张三 s1.attendClass( );
7
例2-2
变量: 变量:描述属性或状态 方法: 方法 作用于数据上的操作
对象:类的具体化, 对象:类的具体化,实例化。
2
类的结构
成员变量 ……
可以是基本类型 或复合类型
成员方法 ……
3
类定义
Java中类定义的一般格式为: 中类定义的一般格式为: 中类定义的一般格式为
访问权限 class 类名 [extends 父类名]{ 父类名 成员变量1; 访问权限 类型 成员变量 访问权限 类型 成员变量2; 成员变量 ...... 成员方法1(参数列表) 访问权限 类型 成员方法 (参数列表){ 局部变量; 类型 局部变量 方法体; 方法体; } ...... }
方法调用语句的实参列表必须足够判明要 方法调用语句的实参列表必须足够判明要 调用的是哪个方法; 调用的是哪个方法; 如果两个同名方法只有返回类型不同, 如果两个同名方法只有返回类型不同,是 不够的, 不够的,因为在方法执行前不知道能得到 什么类型的返回值, 什么类型的返回值,因此也就不能确定要 调用的是哪个方法。 调用的是哪个方法。 重载方法的参数表必须不同, 重载方法的参数表必须不同,即参数个数 或参数类型不同
5
成员方法的定义
格式如下: 格式如下: 访问权限> 参数列表) <访问权限> 返回类型 方法名 (参数列表) { 方法体 }
其中: 返回类型” 其中:“返回类型”不能省略
例:
void setData( String s, String n, int a) { num=s; name=n; age=a; }
this指代当前对象 this指代当前对象
This指代当前对象时, This指代当前对象时,可以用于成员方法 指代当前对象时 中访问类的成员变量。此时this可以省略。 可以省略。 中访问类的成员变量。此时 可以省略
public class Date { private int day, month, year; public void printDate( ) { System.out.println(this.day + " / " + this.month + " / " + this.year); } }
“一般”。 一般”
private private private private private ... } Date dateOfBirth; String jobTitle; int grade; String department; Employee [] subordinates;
24
继承的分类
19
上节主要内容回顾
1 类和对象的概念 类和对象的概念——重点 重点 2 对象的构造和初始化——重点 对象的构造和初始化 重点 3 this关键字 关键字——了解 关键字 了解
20
本节主要内容
1 继承 继承——重点 重点 2方法的重写 覆盖 方法的重写/覆盖 方法的重写 覆盖——重点 重点 3 super关键字 关键字——重点 关键字 重点
11
显式成员初始化
在类定义中, 在类定义中,若在声明成员变量时有简单 的赋值表达式,就可以在构造对象时执行, 的赋值表达式,就可以在构造对象时执行, 从而进行显式的成员初始化。 从而进行显式的成员初始化。 public class student { String num =1005; String name = "Fred"; ... }
22
继承关系
父类
父类: 父类: 将被继承的类称 为父类, 为父类,也称基 类。 子类: 子类: 新定义的类称为 子类或派生类。 子类或派生类。
父类数据 父类方法
继承 子类 父类数据 子类新添加数据 父类方法 子类新添加方法
23
继承是 “is a ”关系
继承关系是“ 关系 public继承关系是“is a ”关系 class Employee { private String 继承关系是“一般与特殊”的关系 继承关系是name; “一般与特殊” private Date hireDate; 例如:雇员Employee类 例如:雇员 private Date dateOfBirth; 类,其子类可以包括经 private String jobTitle; ,一名 Manager { 显然, 理Manager类。显然 class 类 public 一名Manager首先是一 首先是一 private int grade; 即一名 位Employee,即一名Manager name;a ” , private String “is ... private 特殊” Employee关系 ,前者是“Date hireDate; 关系 前者是“特殊”,后者是
1. 单继承: 单继承: 只有一个父类的继承方式
2. 多继承: 多继承: 有多个父类的继承方式
25
单重继承
Java只允许单重继承。目的是让代码的可 只允许单重继承。 只允许单重继承 靠性更高。 靠性更高。 为了保留C++语言中多重继承的功能,提 语言中多重继承的功能, 为了保留 语言中多重继承的功能 出了接口的概念,后面再详细讲。 出了接口的概念,后面再详细讲。 一个子类继承其所有的父类( 一个子类继承其所有的父类(在树中通往 Object的路径上的类)中的属性及行为。 的路径上的类) 的路径上的类 中的属性及行为。
本节主要内容: 本节主要内容:
1 类和对象的概念 类和对象的概念——重点 重点 2 对象的构造和初始化 对象的构造和初始化——重点 重点 3 this关键字——了解 this关键字 关键字——了解
1
1 类/对象(object) 对象(
变量(数据) 方法 行为) 方法(行为 类:封装的实体 = 变量(数据)+方法 行为
10
2 对象的构造和初始化
说明了一个对象后,要调用 运算为新对 说明了一个对象后,要调用new运算为新对 运算 象分配空间, 象分配空间,此时系统会自动调用构造函数 也称构造方法)。 (也称构造方法)。 调用构造方法时系统自动完成如下步骤: 调用构造方法时系统自动完成如下步骤:
分配新对象的空间, (1) 分配新对象的空间,并对成员变量进行缺省 的初始化。 的初始化。 执行显式的成员初始化。 (2) 执行显式的成员初始化。 执行构造方法的方法体。 (3) 执行构造方法的方法体。
16
构造方法的特性
① ② ③ ④ ⑤ ⑥ ⑦
构造方法的名字与类名相同 没有返回值类型 必须为所有的成员变量赋初值 通常要说明为public类型的,即公有的 类型的, 通常要说明为 类型的 可以按需包含所需的参数列表 构造方法可以重载 构造方法不能继承
17
3 关键字 this
public class Student{ 两种用法: 两种用法 String name;: int age; ①this用来指代本类中的其他构造方法 用 public Student(String s, int n){ 用于指代当前对象。 ②this用于指代当前对象。 用于指代当前对象 name = s; age = n; } public Student(String s){ this(s, 20); 创建对象: 创建对象: } Student s1=new Student(“zhao”,18); public Student( ){ Student s2=new Student(“wang”); this(“Li"); Student s3=new Student(); } } 18
4
例2-1 一个学生类定义
Class Student{ String num; String name; int age; void attendClass( ) { System.out.println(“学生去上课”);} 学生去上课” 学生去上课 void setData( String s, String n, int a) { num=s; name=n; age=a;} }
8
}
成员方法的重载
方法的重载:同一个类内的多个方法具有 方法的重载: 相同的方法名,但形参不同。 相同的方法名,但形参不同。 例如: 例如: public void attendClass() {…}; public void attendClass(String s) {…};
9
重载方法几条规则
14
缺省的构造方法
每个类都必须至少有一个构造方法。 每个类都必须至少有一个构造方法。如果 程序员没有为类定义构造方法, 程序员没有为类定义构造方法,系统会自 动为该类生成一个缺省的构造方法。 动为该类生成一个缺省的构造方法。 缺省构造方法的参数列表及方法体均为空, 缺省构造方法的参数列表及方法体均为空, 所生成的对象的成员变量值为零或空。 所生成的对象的成员变量值为零或空。 如果程序员定义了一个或多个构造方法, 如果程序员定义了一个或多个构造方法, 则将自动屏蔽掉缺省的构造方法。 则将自动屏蔽掉缺省的构造方法。
例
public class Student{ String num; String name; int age; public static void main(String args[]) { Student s1 = new Student( ); System.out.println(“num=" + s1.num); System.out.println(“name=" + ); System.out.println(“age=" + s1.age); } }
public class Stduent{ 构造方法是特殊的类方法, 构造方法是特殊的类方法,有着特殊的功 在创建对象实例时由new运算符自动 能String num; 。在创建对象实例时由 运算符自动 String name; 调用。 调用。 Student( ) public 构造方法中参数列表的说明方式就决定了 { num = “1001”; name=“Tom”; } 该类对象的创建方式。 该类对象的创建方式。String n) public Student(String s, { num=s ; name=n;} } 在创建Student实例对象时,只能使用两种形式: 实例对象时, 在创建 实例对象时 只能使用两种形式: Student s1 = new Student( ); Student s2 = new Student(“1002”,“John”);
21
1 继承
Java中的类层次结构为树状结构,这和我 中的类层次结构为树状结构, 中的类层次结构为树状结构 们在自然界中描述一个事物是类似的。 们在自然界中描述一个事物是类似的。 例如:我们可以将动物划分为哺乳类动物 例如:我们可以将动物划分为哺乳类动物 动物 及爬行类动物, 及爬行类动物,然后还可以对这两类动物 继续细分。 继续细分。
系统只在创建类的第一个对象的时候为类的静态成员分配内存以后再创建该类的对象时将不再分配内存不同对象的类变量将共享同一内存空5555成员变量成员方法成员变量成员方法类变量类方法对象a对象b5656java语言中没有全局变量的概念类变量从某种意义上来说相当于其他程序设计语言中的全局变量
第5 讲 进一步讨论对象和类
12
类的构造方法 类的构造方法
构造方法:是类的一个特殊的成员方法, 构造方法:是类的一个特殊的成员方法, 方法名称和类名相同, 方法名称和类名相同,经常用于对类的成 员数据进行初始化,在创建( 员数据进行初始化,在创建(new)对象 ) 时自动调用。 时自动调用。
13
构造方法的调用 构造方法的调用
6
成员方法的调用
调用方法的格式: 调用方法的格式: 对象名. 方法名(参数表 参数表); 对象名 方法名 参数表 例如: 例如: Student s1=new Student( ); s1.setData(“110010”,“张三”,20); 张三” 张三 s1.attendClass( );
7
例2-2
变量: 变量:描述属性或状态 方法: 方法 作用于数据上的操作
对象:类的具体化, 对象:类的具体化,实例化。
2
类的结构
成员变量 ……
可以是基本类型 或复合类型
成员方法 ……
3
类定义
Java中类定义的一般格式为: 中类定义的一般格式为: 中类定义的一般格式为
访问权限 class 类名 [extends 父类名]{ 父类名 成员变量1; 访问权限 类型 成员变量 访问权限 类型 成员变量2; 成员变量 ...... 成员方法1(参数列表) 访问权限 类型 成员方法 (参数列表){ 局部变量; 类型 局部变量 方法体; 方法体; } ...... }
方法调用语句的实参列表必须足够判明要 方法调用语句的实参列表必须足够判明要 调用的是哪个方法; 调用的是哪个方法; 如果两个同名方法只有返回类型不同, 如果两个同名方法只有返回类型不同,是 不够的, 不够的,因为在方法执行前不知道能得到 什么类型的返回值, 什么类型的返回值,因此也就不能确定要 调用的是哪个方法。 调用的是哪个方法。 重载方法的参数表必须不同, 重载方法的参数表必须不同,即参数个数 或参数类型不同
5
成员方法的定义
格式如下: 格式如下: 访问权限> 参数列表) <访问权限> 返回类型 方法名 (参数列表) { 方法体 }
其中: 返回类型” 其中:“返回类型”不能省略
例:
void setData( String s, String n, int a) { num=s; name=n; age=a; }
this指代当前对象 this指代当前对象
This指代当前对象时, This指代当前对象时,可以用于成员方法 指代当前对象时 中访问类的成员变量。此时this可以省略。 可以省略。 中访问类的成员变量。此时 可以省略
public class Date { private int day, month, year; public void printDate( ) { System.out.println(this.day + " / " + this.month + " / " + this.year); } }
“一般”。 一般”
private private private private private ... } Date dateOfBirth; String jobTitle; int grade; String department; Employee [] subordinates;
24
继承的分类
19
上节主要内容回顾
1 类和对象的概念 类和对象的概念——重点 重点 2 对象的构造和初始化——重点 对象的构造和初始化 重点 3 this关键字 关键字——了解 关键字 了解
20
本节主要内容
1 继承 继承——重点 重点 2方法的重写 覆盖 方法的重写/覆盖 方法的重写 覆盖——重点 重点 3 super关键字 关键字——重点 关键字 重点
11
显式成员初始化
在类定义中, 在类定义中,若在声明成员变量时有简单 的赋值表达式,就可以在构造对象时执行, 的赋值表达式,就可以在构造对象时执行, 从而进行显式的成员初始化。 从而进行显式的成员初始化。 public class student { String num =1005; String name = "Fred"; ... }