JAVA 类的封装、继承和多态
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1.1 类
2.
声明成员变量和成员方法
[修饰符] 返回值类型 方法([参数列表]) [throws 异常类] { 语句序列; [return [返回值]]; }
3.
成员方法重载
《Java程序设计实用教程(第3版)》
3.1.2 对象
1. 2. 3.
声明对象
类 对象
创建实例
对象 = new 类的构造方法([参数列表])
7
22
p1
name birthday
7name 22
birthday
p2
name birthday (a) 浅拷贝传递引用,不能复制实例
p2
name birthday
(b) 深拷贝,创建新实
《Java程序设计实用教程(第3版)》
李小明 1979
2.3 深拷贝 15
p1
name birthday
李小明 1979 李小明 1979 3 15 3 15
p1.olderThen(s1) s1.olderThen(p1)
《Java程序设计实用教程(第3版)》
3.4.3 编译时多态和运行时多态性
1.
编译时多态性
方法重载都是编译时多态。 Person p1 = new Person("李小明", new MyDate(1979,3,15)); p1.toString() //执行Person类的toString()
3.3 类的继承性
1.
2. 3.
3.3.1 由继承派生类 3.3.2 继承原则及作用 3.3.3 子类的构造方法
《Java程序设计实用教程(第3版)》
3.3.1 由继承派生类
[修饰符] class 类<泛型> [extends 父类] [implements 接口列表] public class Student extends Person { String speciality; //专业 }
3.4.1 子类重定义从父类继承 来的成员
1.
2.
子类隐藏父类成员变量 子类覆盖父类成员方法
覆盖(override)是指子类声明并实现父类中的 同名方法并且参数列表也完全相同。
3.
子类继承并重载父类成员方法
重载(overload)是指同一个类中的多个方法可 以同名但参数列表必须不同。 【例3.5】 Student类重定义从父类继承来的成 员。
《Java程序设计实用教程(第3版)》
super引用
1.
2.
调用父类的构造方法
super([参数列表])
引用父类同名成员
①
子类隐藏父类成员变量
super.成员变量 super.成员方法([参数列表])
②
子类覆盖父类成员方法
《Java程序设计实用教程(第3版)》
3.4.2 类型的多态
1.
子类对象即是父类对象
缺省
private(私有)
3.
声明set()和get()方法存取对象的属性
《Java程序设计实用教程(第3版)》
3.2.5 静态成员
public class MyDate { private int year,month,day; //实例成员变量 private static int thisYear; //静态成员变量 static //静态成员变量初始化 { thisYear=2009; } public static int getThisYear() //静态成员方法 { return thisYear; //访问静态成员变量 } }
3.2.1 构造方法
1.
声明及调用构造方法
public class MyDate { public MyDate(int y, int m, int d) //声明构造方法 { //构造方法与类同名,构造方法返回该类的一个实例 year = y; month = m; day = d; } } MyDate d = new MyDate(2009,7,18);
d2.se (c) 改变d2对
009 09
7 7
16 16
d1 d2 d2
2009 2008 2008
7 8 8
16 8 8
ew MyDate(); 009 7 16 d1); ew MyDate(); 值同d1实例, (d1); .equals(d2)结果是true
d2.set(2008,8,8); (c) 改变d2对象,不影响d1对象 d2.set(2008,8,8);
3.3.3 子类的构造方法
1.
使用super()调用父类构造方法
super([参数列表]) public Student(String name, MyDate birthday, String spec) { super(name, birthday); //调用父类同参数的构造方法 this.speciality = spec; }
p2
name birthday
用,不能复制实例
(b) 深拷贝,创建新实例,复制实例
public Person(Person p) { this(p.name, new MyDate(p.birthday)); } 【例3.3】 使用对象作为成员变量并实现深拷贝的 Person类。
《Java程序设计实用教程(第3版)》
《Java程序设计实用教程(第3版)》
3.2.5 析构方法
public void finalize() { 语句序列; } //析构方法
《Java程序设计实用教程(第3版)》
3.2.6 浅拷贝与深拷贝
1.
浅拷贝
李小明 1979 3
year month day d1 d2
15
2009
p1 2009
new Student() instanceof Person //true new Person() instanceof Student //false
2.
父类对象引用子类实例
Person p=new Student(); Object obj = new Person();
public int olderThen(Person p)
第3章 类的封装、继承和多态
• • • • • 3.1 3.2 3.3 3.4 3.5 类和对象 类的封装性 类的继承性 类的多态性 类的抽象性
《Java程序设计实用教程(第3版)》
3.1 类和对象
类(class)是既包括数据又包括作用于 数据的一组操作的封装体。 对象(object)是类的实例 (instance)。
【例3.4】 Student类继承Person类。
《Java程序设计实用教程(第3版)》
3.3.2 继承原则及作用
1.
继承原则
①
② ③ ④
子类继承父类的成员变量 子类继承父类除构造方法以外的成员方法 子类不能继承父类的构造方法 子类可以增加成员,可以重定义从父类继承来的 成员,但不能删除它们。
《Java程序设计实用教程(第3版)》
《Java程序设计实用教程(第3版)》
4. 子类对父类成员的访问权限
① ②
③
子类不能访问父类的私有成员(private)。 子类能够访问父类的公有成员(public)和保 护成员(protected)。 子类对父类的缺省权限成员的访问控制,以包 为界分两种情况,可以访问当前包中
《Java程序设计实用教程(第3版)》
《Java程序设计实用教程(第3版)》
【例3.2】封装的日期类。
静态成员变量 MyDate.thisYear 2009 实例成员变量 d1.year d1.month d1.day
2009
d1
2008
8
8
h d1.day 8 d2
d2.year d2.month d2.day 2008 8 8
图3.3 实例成员变量与静态成员变量的存储结构wk.baidu.com同
2.
默认构造方法
public MyDate()
《Java程序设计实用教程(第3版)》
3.拷贝构造方法
public MyDate(MyDate d) { year = d.year; month = d.month; day = d.day; } 调用语句如下:
MyDate d1 = new MyDate(2009,7,16); MyDate d2 = new MyDate(d1);
5. 对象的关系运算与比较相等
d1 d2 d2 2009 7 16 d2 2009 7 16 d1 2009 7 16 d1
20
20
MyDate d2 = d1; MyDate d2 = new MyDate(); (a) 两个对象引用一个实例, d2.set(d1); d1==d2结果是true, (b) 设置d2对象值同d1实例, d1.equals(d2)结果是true d1==d2结果是false,d1.equals(d2)结果是true 09 7 16 d1 2009 7 16
2.
默认执行super()
public Student() { super(); } //Java提供的默认构造方法
//调用父类构造方法Person()
《Java程序设计实用教程(第3版)》
3.4 类的多态性
1.
2.
3.4.1 什么是多态 3.4.2 运行时多态性
《Java程序设计实用教程(第3版)》
《Java程序设计实用教程(第3版)》
3.2.3 this引用和instanceof对象 运算符
1.
this引用
①
指代对象本身
this this.成员变量 this.成员方法([参数列表]) this([参数列表])
②
访问本类的成员变量和成员方法
③
调用本类重载的构造方法
2.
instanceof对象运算符
《Java程序设计实用教程(第3版)》
3.2 类的封装性
1.
2. 3. 4. 5.
6.
3.2.1 构造方法与析构方法 3.2.2 this引用和instanceof对象运算符 3.2.3 访问控制 3.2.4 静态成员 3.2.5 析构方法 3.2.6 浅拷贝与深拷贝
《Java程序设计实用教程(第3版)》
2. 继承的作用
《Java程序设计实用教程(第3版)》
3. Object类
public class Object { public Object() //构造方法 public String toString() //描述对象 public boolean equals(Object obj)//比较对象相等 protected void finalize() throws Throwable } Java中的类都是Object的子类 public class Person extends Object
第2句功能相当于以下两句:
MyDate d2 = new MyDate(); d2.set(d1);
《Java程序设计实用教程(第3版)》
4. 构造方法重载
public MyDate(int y, int m, int d) public MyDate() public MyDate(MyDate d)
类具有封装性、继承性、多态性和抽象性。 3.1.1 类 3.1.2 对象
《Java程序设计实用教程(第3版)》
3.1.1 类
1.
声明类
类声明 { 成员变量的声明; 成员方法的声明及实现; } [修饰符] class 类<泛型> [extends 父类] [implements 接口列表]
《Java程序设计实用教程(第3版)》
d instanceof MyDate
《Java程序设计实用教程(第3版)》
3.2.4 访问控制
1.
类的访问权限:只有public和缺省两种 。
public class MyDate class MyDate_ex
2.
类中成员的访问权限
权限修饰符 public(公有) protected(保护) 同一类 同一包 不同包的子类 所有类
d1 d2 MyDate d2 = d1; (c) 对象引用赋值,两个 对象引用一个实例 2009 7 16
d1.set(2009,7,16); (b) 对象调用类的成员方法
d1 d2 2008 7 16
(c)
对
d2.year = 2008; (d) 修改d2实例的成员 变量值,影响d1对象
《Java程序设计实用教程(第3版)》
引用对象的成员变量和调用对象方法
对象.成员变量 对象.成员方法([参数列表]) Java语言自动释放对象。 【例3.1】声明日期类及使用日期对象。
《Java程序设计实用教程(第3版)》
4. 对象的引用模型
实例 year month day d1 0 0 0 d1 year month day 2009 7 16 d1 d2 MyDate d1 = new MyDate(); (a) 声明对象并引用实例